【问题标题】:Django- Query filter, with a foreign relationshipDjango-查询过滤器,具有外来关系
【发布时间】: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),但我不知道它的规则是什么样的。

【问题讨论】:

    标签: mysql sql django django-models django-views


    【解决方案1】:

    我认为你应该能够做到

    Form.objects.filter(area=None)
    

    假设您的区域类名为Area,并且没有添加自定义related_name

    Read more here

    【讨论】:

    • 有效!其实很简单。我想我可能不得不做一些奇怪的查询。谢谢
    【解决方案2】:

    你可以试试这个。

    Form.objects.filter(area__isnull=True)
    

    【讨论】:

    • 因为@user6731765首先回答我给了他们复选标记,但这也有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2019-11-06
    • 2019-10-26
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多