在过滤器中使用django queryset中的变量或清空过滤器



问题1。我如何在这个查询集中使用一个变量

def function(request):
qset1 = BigTable.objects.values(
'deb_nr_f__dcountry__wcode_f__code',
'deb_nr_f__dcountry__wcode_f__code_name',
).filter(id_nr_f__ie_code__unomer_f__nomer=iteration_result,
)

我是说类似的东西

def function(request):
x1 = 'id_nr_f__ie_code__unomer_f__nomer'
qset1 = BigTable.objects.values(
'deb_nr_f__dcountry__wcode_f__code',
'deb_nr_f__dcountry__wcode_f__code_name',
).filter(x1 = iteration_result,
)

问题2。我如何用varianbe清空过滤器,这样查询中的过滤器就不会过滤记录。我是说类似的东西

def function(request):
x1 = 'id_nr_f__ie_code__unomer_f__nomer'
x2 = True
qset1 = BigTable.objects.values(
'deb_nr_f__dcountry__wcode_f__code',
'deb_nr_f__dcountry__wcode_f__code_name',
).filter(x1 = x2,
)

谢谢。

您可以定义一个dict,然后将其作为kwargs传递给filter

attr1 = 'some attr'
attr2 = 'some attr'
filter_dict = {
attr1:filter1,
attr2:filter2,
...
}
queryset.filter(**filter_dict)

您可以使用Q对象,在该对象中传递要过滤的2元组:

from django.db.models importQ
def function(request):
x1 = 'id_nr_f__ie_code__unomer_f__nomer'
qset1 = BigTable.objects.values(
'deb_nr_f__dcountry__wcode_f__code',
'deb_nr_f__dcountry__wcode_f__code_name',
).filter(
Q((x1, iteration_result))
)

或具有值:

from django.db.models importQ
def function(request):
x1 = 'id_nr_f__ie_code__unomer_f__nomer'
x2 = True
qset1 = BigTable.objects.values(
'deb_nr_f__dcountry__wcode_f__code',
'deb_nr_f__dcountry__wcode_f__code_name',
).filter(
Q((x1, x2))
)

最新更新