繁体   English   中英

Django ORM:model 带有来自另一个 Z20F35E630DAF44DBFA4C3F68F53 的项目列表

[英]Django ORM : model with a list of items from another model

在我的 Django 模型中,我有两个模型:一个称为Site ,另一个是SiteFeature

对象而言,它应该如何工作非常清楚:站点class 的每个实例都应该具有一个包含SiteFeature class 实例的列表作为属性,这仅仅是因为SiteFeature对象应该只存在于与站点ZA8CFDE6331BD59EB2AC96F8911111116666666666666666666666666666666

数据库方面,它应该如何工作也非常清楚: SiteFeature表应该包含一个不可为空的列,该列引用Site表的主键 id 列,并带有一个外键。

但就 Django ORM 而言,我不知道如何编码。

基于this questionthis other example ,似乎经典的进行方式相反:

  • 站点model class 不包含 ORM Z20F35E630DAF44DBFA4C3F68F5399D8Z 字段引用SiteFe列表。
  • 相反, SiteFeature ORM model class 具有引用站点ZA2F2ED4F8DCEBC2CBBDZC21A2 的ForeignKey字段。

I see there is a way to code this out: by adding a function to the Site model class that searches all the related SiteFeature , and make this function a property (decorator @property ):

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

但这让我怀疑:

对我来说正确的逻辑也是,当我保存、更新或创建站点class 的实例时,它也会自动保存/更新/创建与其相关的SiteFeature实例。 (删除 object 也是如此,但可以通过 ForeignKey 字段的on_delete=models.CASCADE参数覆盖)。 我可以添加我自己的save_with_features / update_with_features / create_with_features方法来级联所有,但我不确定如果 Django 自动调用标准保存/更新/创建(例如批量操作)会发生什么。

这个问题似乎很基本,我想已经有一种正确的方法可以做到这一点。 那会怎么样?

最终,我用sitefeature_set Manager 解决了这个问题。

参考: https://docs.djangoproject.com/en/3.0/topics/db/queries/#following-relationships-backward

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM