У меня есть три таблицы: пользователь, устройство и роль.Я создал отношение «многие ко многим» ч / б «Пользователь и устройство» следующим образом:
#Many-to-Many relation between User and Devices
userDevices = db.Table("user_devices",
db.Column("id", db.Integer, primary_key=True),
db.Column("user_id", db.Integer, db.ForeignKey("user.id")),
db.Column("device_id", db.Integer, db.ForeignKey("device.id"))))
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(60), index=True, unique=True)
devices = db.relationship("Device", secondary=userDevices, backref=db.backref('users'), lazy="dynamic")
class Device(db.Model):
__tablename__ = 'device'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), unique=True)
Это работает тихо, хорошо.Я могу назначить устройство d1
пользователю u1
> d1.users.append(u1)
, а пользователя устройству> u1.devices.append(d1)
и db.session.commit()
.
Что мне нужно, так это расширить таблицу user_devices
наеще один столбец как role_id
, который будет ForeignKey для таблицы ролей.Так что эта таблица user_devices
будет четко описывать Role
для конкретного User
для конкретного Device
.после добавления столбца role_id
в таблицу user_devices
я описал Role
таблицу как;
class Role(db.Model):
__tablename__ = 'role'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), unique=True)
device = db.relationship("Device", secondary=userDevices, backref=db.backref('roles'), lazy="dynamic")
Таким образом, как я могу назначить роль r1
пользователю u1
на устройстве d1
?вот что я попробовал:
# First get the device, user and role
deviceRow = db.session.query(Device).filter(Device.name=="d1").first()
userRow = db.session.query(User).filter(User.username=="u1").first()
roleRow = db.session.query(Role).filter(Role.name == "r1").first()
# Then add the user on that device
deviceRow.users.append(userRow)
deviceRow.roles.append(roleRow)
Это создает две строки в таблице user_devices
Есть ли способчто мы могли бы добавить два атрибута в таблицу, как это?;
deviceRow.users.append(userRow).roles.append(roleRow)
, чтобы она создавала только одну строку после commit ()?