Django ORM : 模型中包含一个来自另一个模型的项目列表。

问题描述 投票:0回答:1

在我的Django模型中,我有两个模型:一个叫做 场地 其二 网站特色.

对象方面很明显,这应该是如何工作的:每个实例的 场地 类应该有一个列表作为属性,其中包含了 网站特色 类,只是因为 网站特色 对象只应存在于与 场地 对象。

数据库方面它也很清楚应该如何工作: 网站特色 表中应该包含一个不可空的列,它引用了表的主键id列。场地 表,有一个外键。

但是在Django ORM方面,我不知道如何编码。

基于 这个问题这个例子看来,传统的做法是反其道而行之。

  • 场地 模型类中没有引用ORM模型字段的 网站特色 列表。
  • 而不是 网站特色 ORM模型类有一个 外来键 字段,引用的是 场地 类。

我发现有一种方法可以将其编码出来:通过在 场地 模型类,搜索所有相关的 网站特色,并将此函数作为一个属性(装饰者 @property):

@property
def site_features(self):
    return SiteFeature.objects.filter(site_id=site_id)

但这让我感到疑惑。

对我来说,正确的逻辑应该是,当我保存、更新或创建一个实例的 场地 类,它也会自动保存更新创建实例的 网站特色 与它相关的。(删除对象也是一样的,但是可以由 on_delete=models.CASCADE 外键字段的参数).我可以添加我自己的 Save_with_features update_with_features 创建与特征 但是我不知道在Django自动调用标准的保存更新创建方法的情况下会发生什么,比如在批量操作中。

这个问题看起来很基本,我想应该已经有一个合适的方法来解决了。 如何做到这一点呢?

python django orm django-orm
1个回答
0
投票

最终,我用下面的方法解决了这个问题。sitefeature_set 经理。

参考文献。https:/docs.djangoproject.comen3.0topicsdbqueries#following-relationships-backward。

© www.soinside.com 2019 - 2024. All rights reserved.