簡體   English   中英

使用flask_sqlalchemy 創建多對多關系

[英]create a many to many relationship with flask_sqlalchemy

我想在用戶和事件之間建立關系。 我希望用戶能夠注冊活動。

我已經有一個一對多關系的用戶和事件模型

用戶模型

class User(db.Model,UserMixin):

  __tablename__ = 'users'

  id = db.Column(db.Integer,primary_key = True)
  .........
  events = db.relationship('Event',backref='organiser', lazy=True)

##事件模型

class Event(db.Model):

    __tablename__ = 'events'

    id = db.Column(db.Integer,primary_key = True)
    ........
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)

我需要幫助來創建用戶注冊表。 該表應包含其他字段,而不僅僅是事件和用戶 ID

我希望能夠做這樣的查詢

user.event_registrations
event.event_registrations
event.event_registrations.users
user.events

這是我按照文檔創建表格的嘗試。

class EventRegistration(db.Model):
    __tablename__ = 'event_registrations'
    user_id = Column(ForeignKey('users.id'), primary_key=True)
    event_id = Column(ForeignKey('events.id'), primary_key=True)
    extra_data1 = Column(String(50))
    extra_data2 = Column(String(50))
    event = db.relationship("Event", back_populates="users")
    user = db.relationship("Member", back_populates="events")

class User(db.Model):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    ....
    events = db.relationship("EventRegistration", back_populates="user")

class Event(db.Model):
    __tablename__ = 'events'
    id = Column(Integer, primary_key=True)
    ....
    users = db.relationship("EventRegistration", back_populates="event")

幫助正確設置數據庫 謝謝

您還沒有創建真正的多對多關系,而是創建了一些一對多關系。

為了說明這一點,在多對多關系中, User.events會給你一個Events列表。 在您的情況下,您將獲得EventRegistrations列表。

話雖如此,您可能不需要走多對多路線,您只需要修復您的一對多關系。 文檔可以提供幫助,但看起來您正在混合ForeignKeysprimary_keys 不要這樣做,並按照文檔中的示例進行操作。

創建多對多關系的正確方法是創建關聯表

Events=db.Table('Events',
db.Column(db.Integer,db.ForeignKey('user.id'),primary_key=True),
db.Column(db.Integer,db.ForeignKey('event.id'),primary_key=True)
)

        class User(db.Model,UserMixin):
        
          __tablename__ = 'users'
        
          id = db.Column(db.Integer,primary_key = True)
          .........
          events = db.relationship('Event',secondary=Events,backref='organiser', lazy=True)
    
    class Event(db.Model):
    
        __tablename__ = 'events'
    
        id = db.Column(db.Integer,primary_key = True)
        ........

如果你想了解更多關於多對多的信息,我建議你閱讀這篇文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM