Набор запросов Django со значением переменной - PullRequest
0 голосов
/ 30 апреля 2018

Я пишу динамические фильтры в django для своей базы данных, где я использую приведенный ниже код, где у меня есть 2 переменные (p_type, s_type):

        p_type=[]
        s_type=[]
        query = request.GET.get("q")
        p_type =request.GET.get("p_type")
        s_type = request.GET.get("s_type")
        #messages.add_message(request, messages.INFO, p_type)
        #messages.add_message(request, messages.INFO, s_type)
        if query:
            queryset_find = queryset_list.filter(
                Q(FP_Item__contains=query))
            context = {'object_list': queryset_find}
            return render(request, 'index.html', context)
        elif p_type:
            queryset_find = queryset_list.filter(
                Q(p_type__contains=s_type))
            context = {'object_list': queryset_find}
            return render(request, 'index.html', context)
        else:
            context = {'object_list': queryset}
            return render(request, 'index.html', context)

но django возвращает ошибку в строке ниже

Q(p_type__contains=s_type))

У меня есть динамическая радиокнопка, в которой значение p_type совпадает с моей базой данных, но я получаю следующую ошибку:

Exception Type: FieldError
Exception Value:    
Cannot resolve keyword 'p_type' into field. Choices are: ... (same choices which I am using with my database).

Разве это невозможно с переменным запросом? Любые другие методы?

Модель:

class RFP(models.Model):
    FP_Item = models.TextField(max_length=1500)
    P_63 = models.TextField(max_length=1000)
    P_64 = models.TextField(max_length=1000)

1 Ответ

0 голосов
/ 30 апреля 2018

Если p_type содержит имя поля, которое вы хотите запросить, то вы можете сделать:

elif p_type:
    kwargs = {
        '{}__contains'.format(p_type): s_type
    }
    queryset_find = queryset_list.filter(Q(**kwargs))
    ...
...