Django 3.0 Python 3.* - 嵌套查询和过滤器
Django 3.0 Python 3.* - Nested Queries and Filters
场景:提供值以过滤某些记录的表单。我有 4 个模型 A、B、C 和 D.
A 与 B
有 OneToOne
关系
B 与 C
有 ManyToOne
关系
C 与 D
有 ManyToOne
关系
给定的表单值是模型D中的一个字段,我要检索的记录是模型A[=18中的一个字段=]
我试过:
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
)
)
)
我收到那个错误:
SyntaxError: keyword argument repeated
然后经过一些搜索我尝试给出答案 :
records = A.objects.filter(
a_field = "form_given_value_1",
B__b_field__c_field__d_field = form_given_value_2
)
它没有给我错误,但它也没有给出记录!..
如何实现该方法?
首先 你需要检查 form_given_value_*
是否为空,因为如果任何一个等于空(无输入),filter()
将 return 没什么
第二个 检查后您需要将过滤器传递给 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)
场景:提供值以过滤某些记录的表单。我有 4 个模型 A、B、C 和 D.
A 与 B
有OneToOne
关系
B 与 C
有ManyToOne
关系
C 与 D
有ManyToOne
关系
给定的表单值是模型D中的一个字段,我要检索的记录是模型A[=18中的一个字段=]
我试过:
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
)
)
)
我收到那个错误:
SyntaxError: keyword argument repeated
然后经过一些搜索我尝试给出答案
records = A.objects.filter(
a_field = "form_given_value_1",
B__b_field__c_field__d_field = form_given_value_2
)
它没有给我错误,但它也没有给出记录!..
如何实现该方法?
首先 你需要检查 form_given_value_*
是否为空,因为如果任何一个等于空(无输入),filter()
将 return 没什么
第二个 检查后您需要将过滤器传递给 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)