1

グループの一部であるメンバーのリストを使用してグループオブジェクトを初期化するにはどうすればよいですか(ユーザーは、グループの一部であるグループを認識している必要があります)

ユーザーには多くのグループがあります。グループには多くのユーザーがいます。

Userクラスのメソッドも試しましたadd_to_groupが、うまくいきませんでした。

多対多の関係を扱うのはこれが初めてなので、その方法をまだ理解していません。すべてのSO投稿は、それらを使用するオブジェクトを作成するのではなく、多対多の関係を照会することを参照しています。

class User(db.Model):
    __tablename__ = 'User'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique = False, nullable = False)
    username = db.Column(db.String(80), unique = True, nullable = False)
    fb_id = db.Column(db.String(80), unique = True, nullable = False)
    groups = db.relationship('Groups', secondary=groups, backref=db.backref('User', lazy='dynamic'))

groups = db.Table('groups',
    db.Column('group_id', db.Integer, db.ForeignKey('Group.id')),
    db.Column('user_id', db.Integer, db.ForeignKey('User.id'))
)

class Group(db.Model):
    __tablename__ = 'Group'
    id = db.Column(db.Integer, primary_key=True)
    last_updated = db.Column(db.DateTime, mutable=True)

    def __init__(self):
        self.last_updated = datetime.utcnow();

ありがとう!

4

1 に答える 1

3

SQLAlchemyでは、多対多の関係は、値がリストである属性としてモデル化されます。

u = User()
g = [Group(), Group(), Group()]

u.groups = g

リストをインプレースで変更することもできます。

g1 = Group()
u.groups.append(g)

関係の反対側も同じように機能します。

g.users.append(User())

多対多の関係の一方を変更すると、SQLAlchemyはもう一方の側を最新の状態に保ちます。つまり、リストからを削除すると、そのリストにはUser表示されなくなります。。GroupusersGroupUsergroups

于 2013-03-02T21:51:41.097 に答える