Как реализовать функцию ИЛИ в моем наборе запросов - PullRequest
1 голос
/ 06 мая 2020

В настоящее время я создал модель, как показано ниже


class Customer(models.Model):
    first_name = models.CharField(max_length=200, null=True)
    middle_name = models.CharField(max_length=200, blank=True,default='')
    last_name = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200, null=True)

В моем views.py

У меня есть

    customer_list =  Customer.objects.all()

    myFilter1 = CustomerlistFilter(request.GET,queryset=customer_list)
    customer_list = myFilter1.qs

И в моем filter.py Я написал то, что показано ниже


class CustomerlistFilter(django_filters.FilterSet):
    id = CharFilter(lookup_expr='icontains')
    first_name = CharFilter(lookup_expr='iexact')
    middle_name = CharFilter(lookup_expr='iexact')
    last_name = CharFilter(lookup_expr='iexact')


    class Meta:
        model = Customer
        fields = ['id', 'first_name', 'middle_name', 'last_name']

Есть ли способ реализовать функцию ИЛИ, чтобы я мог иметь одно поле поиска вместо нескольких полей для каждого поля?

1 Ответ

0 голосов
/ 06 мая 2020

Думаю, вам не нужно использовать FilterSet, поскольку FilterSet - это, ну, набор способов фильтрации.

Можно просто фильтровать с помощью h :

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

customer_list =  Customer.objects.filter(
    <b>Q(</b>id__icontains=search_query<b>) |</b>
    <b>Q(</b>first_name__icontains=search_query<b>) |</b>
    <b>Q(</b>middle_name__icontains=search_query<b>) |</b>
    <b>Q(</b>last_name__icontains=search_query<b>)</b>
)

Если в поле поиска указано name="&hellip;", вы можете получить значение в поле поиска с помощью:

search_query = request<b>.GET.get(</b>'name-of-input-item'<b>)</b>
...