Django 3.0 Python 3.* - 嵌套查询和过滤器

问题描述 投票:0回答:1

场景。给出值来过滤一些记录的表单。我有4个模型 A, B, CD.

AOneToOne 与...的关系 B

BManyToOne 与...的关系 C

CManyToOne 与...的关系 D

给出的表格值是模型中的一个字段 D而我要检索的记录是在模型中。A

我已经试过了。

records= A.objects.filter(
            a_field = "form_given_value_1",
            B__b_field = C.objects.filter( 
                c_field = D.objects.filter(
                    d_field=form_given_value_2
                )
            )
        )

我得到了这个错误。

语法错误:关键字参数重复

然后经过一些搜索,我尝试给定的答案 此处:

records = A.objects.filter(
             a_field = "form_given_value_1",
             B__b_field__c_field__d_field = form_given_value_2
          )

它不给我错误,但它也不给记录!...

如何实现这种方法?

python-3.x django-models django-queryset django-3.0
1个回答
0
投票

第一 你需要检查是否 form_given_value_* 是空的,因为如果any等于null(无输入),则 filter() 一无所获

第二次 检查后,你需要通过过滤器到 filter() 到了

我们像下面这样实现。

    from django.db.models import Q

    filters = Q()
    if form_given_value_1:
        filters &= Q(a_field = "form_given_value_1",)
    if form_given_value_2:
        filters &= Q(B__b_field__c_field__d_field = form_given_value_2,)

    records = A.objects.filter(filters)
© www.soinside.com 2019 - 2024. All rights reserved.