【问题标题】:Flask SQLAlchemy update only the link between 2 modelsFlask SQLAlchemy 仅更新 2 个模型之间的链接
【发布时间】:2020-10-22 06:04:17
【问题描述】:

我在 python 3.7 中使用 Flask、SQLAlchemy、Marshmallow 开发了一个 API。 我尝试通过表格链接修改与许多功能相关的对象“项目”,反之亦然。

{
"id": "0fef2a90-f468-4e8e-827d-3d1804cb3ad5",
"name": "item 1",
"functions": [],
}

我想在这个项目1中添加一个现有的功能:

{
"id": "0fef2a90-f468-4e8e-827d-3d1804cb3ad5",
"name": "item 1",
"functions": [{
    "id": "35f56892-2154-4f11-8af5-6a13b1456fc4",
    "name": "function 1"
 }],
}

这是我的模型和模式的代码:

class ItemModel(db.Model):
    __tablename__ = 'item'

    id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
    name = db.Column(db.Text, unique=True, nullable=False)

    functions = db.relationship('FunctionModel', secondary='link_item_function', uselist=True)


class FunctionModel(db.Model):
    __tablename__ = 'function'

    id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
    name = db.Column(db.Text, unique=True, nullable=False)
    description = db.Column(db.Text)

    items = db.relationship('ItemModel', secondary='link_item_function', uselist=True)


class LinkItemFunctionModel(db.Model):
    __tablename__ = 'link_item_function'

    function_id = db.Column(UUID(as_uuid=True), db.ForeignKey('function.id', ondelete='CASCADE'))
    item_id = db.Column(UUID(as_uuid=True), db.ForeignKey('item.id', ondelete='CASCADE'))

    link_item_function_pkey = db.PrimaryKeyConstraint(function_id, item_id)


from ma import ma

class FunctionSchema(ma.SQLAlchemyAutoSchema):

    items = ma.Nested('ItemSchema', many=True, exclude=('functions',))
    class Meta:
        model = FunctionModel
        load_instance = True
        transient = True


class ItemSchema(ma.SQLAlchemyAutoSchema):

    functions = ma.Nested('FunctionSchema', many=True, exclude=('items',))
    class Meta:
        model = ItemModel
        load_instance = True

当我这样做时,我的 API 会尝试创建函数,但我只想在表“link_item_function”中创建链接,而不是函数。如果该函数不存在,则返回错误。我到处寻找,但没有成功。 有没有好的方法来做到这一点? 我想在 SQLAlchemy 包中直接有这个解决方案。

提前感谢您的帮助!

【问题讨论】:

    标签: python flask sqlalchemy many-to-many


    【解决方案1】:

    经过数天数月的研究,我通过questionofficial documentation 找到了“associationproxy”的解决方案!

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 1970-01-01
      • 2017-06-06
      • 2012-07-28
      • 2020-10-03
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      相关资源
      最近更新 更多