Django-查询过滤器,具有外来关系
Posted
技术标签:
【中文标题】Django-查询过滤器,具有外来关系【英文标题】:Django- Query filter, with a foreign relationship 【发布时间】:2017-10-05 01:31:18 【问题描述】:我在 Django 中遇到了一个使用 mysql 数据库的查询问题,由于是新手,我无法解决。
我有 2 个模型,Area 和 Form。 一个 Area 可能有 1 个或多个 Forms 与之关联,因此它与 Forms 有外来关系:
form = models.ManyToManyField(Form)
在我的一个 Django 视图中,我想从数据库中获取所有“无区域”的表单,即不与任何区域相关联,并在模板中使用它们。
例如,如果我这样查询数据库(polls 是应用程序名称):
SELECT `polls_area_form`.`id`,
`polls_area_form`.`area_id`,
`polls_area_form`.`form_id`
FROM `myproject`.`polls_area_form`;
我明白了:
id area_id form_id
1 1 1
2 1 3
3 2 3
表明在此示例场景中,区域 1 与表格 1 和 3 相关联。区域 2 与表格 3 相关联。因此,由于未与任何区域相关联,因此我想在此处检索表格 2。
在我的观点中,在一个简单的情况下,无论如何有人想要检索所有表单,我只需使用 all_forms = Form.objects.filter()
(Python),然后使用它来呈现我对请求的响应。
我无法确定在这种情况下应该使用什么过滤器,或者这里是否需要实际的 SQL 语句。
通过阅读 Django 文档,我觉得可能需要在过滤器后使用 .exclude(some rule)
,但我不知道它的规则是什么样的。
【问题讨论】:
【参考方案1】:我认为你应该能够做到
Form.objects.filter(area=None)
假设您的区域类名为Area
,并且没有添加自定义related_name
Read more here
【讨论】:
有效!其实很简单。我想我可能不得不做一些奇怪的查询。谢谢【参考方案2】:你可以试试这个。
Form.objects.filter(area__isnull=True)
【讨论】:
因为@user6731765首先回答我给了他们复选标记,但这也有效以上是关于Django-查询过滤器,具有外来关系的主要内容,如果未能解决你的问题,请参考以下文章