【问题标题】:Many-to-many relationships from multiple models using flask-sqlalchemy使用 flask-sqlalchemy 来自多个模型的多对多关系
【发布时间】:2021-12-09 02:24:55
【问题描述】:

对于我正在做的 Flask 项目,我需要实现一个功能,该功能可以为一篇文章启用多个作者。但是,要求是作者来自两个不同的类(模型)——即,

  1. 用户
  2. 委员会

这两个模型必须和第三个表相关,即,

  1. 文章

使用flask-sqlalchemy定义的模型如下。

User模特:

    class User(db.model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.UnicodeText)
        designation = db.Column(db.UnicodeText)

Committee模特:

    class Committee(db.model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.UnicodeText)
        region = db.Column(db.UnicodeText)

Article模特:

    class Article(db.model):
        id = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.UnicodeText)
        body = db.Column(db.UnicodeText)
        authors = db.relationship()

我知道to implement a many-to-many relationship 方法涉及Article-UserArticle-Committee 对。但是,我正在尝试实现Article-(User, Committee) 关系。也就是说,一篇文章将有一个或多个用户和/或委员会作为作者,而一个用户或一个委员会将有一篇或多个文章。这可能吗?

【问题讨论】:

    标签: python sql sqlalchemy flask-sqlalchemy


    【解决方案1】:

    提供的多对多关系链接是朝着正确方向迈出的一步。我将构建一个“关联”表,将所有三个主键作为外键连接起来。这将允许所有三个模型的多个条目,并在所有方向上创建多对多关系。

    Associations= db.Table('Associations',
        db.Column('FKID_USER', db.Integer, db.ForeignKey('User.id'), primary_key=True),
        db.Column('FKID_COMMITTEE', db.Integer, db.ForeignKey('Committee.id'), primary_key=True),
        db.Column('FKID_ARTICLE', db.Integer, db.ForeignKey('Article.id'), primary_key=True)
    )
    

    根据您的描述,您最终可能会在条目的一列中得到 null 值。

    【讨论】:

    • 谢谢,@rory。您能否解释一下如何在文章模型中添加“作者”关系。
    猜你喜欢
    • 2016-08-23
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2021-08-31
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    相关资源
    最近更新 更多