Tôi có 3 bảng: Người dùng, Cộng đồng, community_members (cho mối quan hệ nhiều2many người dùng và cộng đồng).SQLAlchemy Bảng phụ ManyToMany với các trường bổ sung
tôi có thể tạo bảng này sử dụng Flask-SQLAlchemy:
community_members = db.Table('community_members',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('community_id', db.Integer, db.ForeignKey('community.id')),
)
class Community(db.Model):
__tablename__ = 'community'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False, unique=True)
members = db.relationship(User, secondary=community_members,
backref=db.backref('community_members', lazy='dynamic'))
Bây giờ tôi muốn thêm trường bổ sung để community_members như thế này:
community_members = db.Table('community_members',
db.Column('id', db.Integer, primary_key=True),
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('community_id', db.Integer, db.ForeignKey('community.id')),
db.Column('time_create', db.DateTime, nullable=False, default=func.now()),
)
Và bây giờ trong vỏ python tôi có thể làm điều này:
tạo cộng đồng:
> c = Community()
> c.name = 'c1'
> db.session.add(c)
> db.session.commit()
thêm thành viên vào cộng đồng:
> u1 = User.query.get(1)
> u2 = User.query.get(2)
> c.members.append(u1)
> c.members.append(u2)
> db.session.commit()
> c.members
[<User 1>, <User 2>]
Ok, công trình này.
Nhưng bây giờ tôi có thể nhận time_create bảng community_members như thế nào?
Tôi đã sử dụng giải pháp của bạn và nó đã hoạt động nhưng tôi vẫn gặp sự cố. Có thể là Community.members (được thêm vào với proxy kết hợp) trả về một AppenderBaseQuery mà tôi có thể thêm bộ lọc khác, ví dụ: Community.members.filter_by (...)? Tôi đã từng làm điều đó với mối quan hệ nhiều - nhiều, sử dụng lazy = dynamic trong khai báo quan hệ, nhưng sau khi đưa ra một ánh xạ lớp tới bảng kết hợp, có vẻ như tôi không thể làm điều đó nữa. – stefanobaldo
Bạn đã bao giờ khám phá ra giải pháp @stefanobaldo - sẽ thực sự hữu ích nếu bạn đã làm! – pip