Использование переменной в django queryset в фильтре или очистить фильтр - PullRequest
2 голосов
/ 30 марта 2020

Вопрос 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,
        )

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

вы можете определить dict, а затем передать его filter как kwargs

attr1 = 'some attr'
attr2 = 'some attr'
filter_dict = {
    attr1:filter1,
    attr2:filter2,
     ...
}
queryset.filter(**filter_dict)
1 голос
/ 30 марта 2020

Вы можете использовать объект Q, в котором вы передаете 2-кортеж, который хотите фильтровать:

from django.db.models import <b>Q</b>

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(
        <b>Q((x1, iteration_result))</b>
    )

или со значением:

from django.db.models import <b>Q</b>

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(
        <b>Q((x1, x2))</b>
    )
...