django 查询具有外键的模型,检查该外键的属性

Posted

技术标签:

【中文标题】django 查询具有外键的模型,检查该外键的属性【英文标题】:django query a model that has a foreign key, checking a property of that foreign key 【发布时间】:2020-11-15 11:53:22 【问题描述】:

假设我有两个模型, model_0 model_1

model_0 定义如下

def model_0:
    ...
    foreign_key = models.ForeignKey(model_1)
    ...

model_1

def model_1:
    ...
    random_property = models.Charfield()
    ...

model_1 model_0

中的外键(可以是多对多或其他)

如何在 model_1 对象中执行查询以检查 model_0

的属性

类似model_0.objects.filter(model_0.random_property="Something")

我知道您可以使用model_0.objectsl.filter(model_0="Instance of model 0") 之类的模型轻松执行查询

但是我还没有看到任何方法来检查该对象的特定属性

【问题讨论】:

【参考方案1】:

您可以“看穿”带有双下划线 (__) 的关系,因此您可以使用以下内容进行过滤:

model_0.objects.filter(<b>foreign_key__random_property='Something'</b>)

这将使查询看起来像:

SELECT model_0.*
FROM model_0
LEFT OUTER JOIN model_1 ON model_1.id = model_0.foreign_key_id
WHERE model_1.random_property = 'Something'

【讨论】:

【参考方案2】:

在你的情况下它是由双下划线完成的,它看起来像这样model_0.objects.filter(model_1__random_property="Something") 尝试阅读 Django 文档here。他们真的很有帮助。

【讨论】:

以上是关于django 查询具有外键的模型,检查该外键的属性的主要内容,如果未能解决你的问题,请参考以下文章

Django 和具有多个外键的模型

django模型在具有外键的字段中没有列错误

Django ORM - 我可以使用 ID 以外的其他列创建具有外键的新对象吗?

如何清理 Django 孤儿外键值?

仅作记录,游标,级联删除,获取所有该外键的表名

如何使用具有外键的模型进行 Q 查询?