创建具有多对多关系的对象

时间:2013-03-02 20:49:35

标签: python web-applications sqlalchemy flask-sqlalchemy

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

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

我还在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();

谢谢!

1 个答案:

答案 0 :(得分:3)

在SQLAlchemy中,多对多关系被建模为其值为列表的属性。

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

u.groups = g

您也可以就地更改列表:

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

关系的另一面也会以同样的方式运作:

g.users.append(User())

当您改变多对多关系的一方时,SQLAlchemy会保持另一方的最新状态 - 换句话说,如果您从User删除Group users列表,然后Group的{​​{1}}列表中不再显示User

相关问题