#python #flask #flask-sqlalchemy
#python #flask #flask-sqlalchemy
Вопрос:
Я пытаюсь создать приложение, подобное discord, но мне не удалось правильно установить взаимосвязь. Я использую ассоциативную таблицу «участники» для привязки пользователей к серверу. Я считаю, что пользователи и серверы должны хранить копию взаимосвязи, чтобы пользователь мог распечатать все серверы, к которым он подключен, и сервер мог видеть всех своих членов. Это код, который у меня есть на данный момент.
members = db.Table('members',
db.Column('member_id', db.Integer, db.ForeignKey('user.id')),
db.Column('workspace_id', db.Integer, db.ForeignKey('workspace.id')))
class User(db.Model):
__tablename__="user"
id=db.Column(db.Integer,primary_key=True)
username=db.Column(db.String,nullable=False, unique=True)
workspaces = db.relationship(
"Workspace",
secondary=members,
primaryjoin=(members.c.workspace_id == id),
backref=db.backref('members', lazy='dynamic'), lazy='dynamic')
class Workspace(db.Model):
__tablename__="workspace"
id=db.Column(db.Integer,primary_key=True)
workspaceName=db.Column(db.String,nullable=False)
subgroups=db.relationship("subGroup",backref="workspace",lazy=True)
code = db.Column(db.String, nullable=False)
users = db.relationship(
"User",
secondary=members,
primaryjoin=(members.c.member_id == id),
backref=db.backref('members', lazy='dynamic'), lazy='dynamic')
Я добавляю с обеих сторон взаимосвязи или просто добавляю один раз?
Комментарии:
1. Ваше использование неверно.
users = db.relationship(User, secondary=members, backref=db.backref('workspaces', lazy='dynamic'), lazy='dynamic')
этого достаточно для вас.2. @Yangghg Это для класса Workspace, верно? Итак, мне нужно добавить только один раз, например user.members.append (workspace), и это должно сработать?
3. У пользователей существует
members.c.workspace_id == id
в качестве условия primaryjoin, но идентификатор равен Users.id так что это не имеет смысла. Аналогично в Workspace для member_id.