1

如何使用属于组的成员列表初始化组对象(并且用户必须知道他们所属的组)

用户有很多组。组有很多用户。

我还尝试了add_to_groupUser 类中的一个方法,但这并没有真正奏效。

这是我第一次处理多对多关系,所以我还没有弄清楚如何去做,所有的 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从 aGroupusers列表中删除 a,那么Group它将不再出现在该列表Usergroups.

于 2013-03-02T21:51:41.097 回答