在我的Django模型中,我有两个模型:一个叫做 场地 其二 网站特色.
对象方面很明显,这应该是如何工作的:每个实例的 场地 类应该有一个列表作为属性,其中包含了 网站特色 类,只是因为 网站特色 对象只应存在于与 场地 对象。
数据库方面它也很清楚应该如何工作: 网站特色 表中应该包含一个不可空的列,它引用了表的主键id列。场地 表,有一个外键。
但是在Django 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自动调用标准的保存更新创建方法的情况下会发生什么,比如在批量操作中。
这个问题看起来很基本,我想应该已经有一个合适的方法来解决了。 如何做到这一点呢?
最终,我用下面的方法解决了这个问题。sitefeature_set
经理。
参考文献。https:/docs.djangoproject.comen3.0topicsdbqueries#following-relationships-backward。