场景。给出值来过滤一些记录的表单。我有4个模型 A, B, C 和 D.
A 有 OneToOne
与...的关系 B
B 有 ManyToOne
与...的关系 C
C 有 ManyToOne
与...的关系 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
)
它不给我错误,但它也不给记录!...
如何实现这种方法?
第一 你需要检查是否 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)