Как написать эквивалентный фильтр в Django для запроса ниже - PullRequest
0 голосов
/ 26 октября 2019

Ниже приведен запрос, который я использую для экрана поиска. Mobile1, sponsor1 и status1 - это поля ввода от пользователя. Если эти поля не введены, все значения должны быть возвращены как выходные.

Запрос:

       Select * from customer
       where mobile = nvl(mobile1,mobile)
       and sponsor = nvl(sponsor1,sponsor)
       and status = nvl(status1,status);

Models.py

    class customer(models.Model):
        company = models.CharField(max_length=3)
        mobile = models.CharField(max_length=10)
        name = models.CharField(max_length=100)
        sponsor = models.CharField(max_length=10)
        address1 = models.CharField(max_length=200)
        country = models.CharField(max_length=101)
        state = models.CharField(max_length=100)
        city = models.CharField(max_length=100)
        zip = models.CharField(max_length=6)
        email = models.EmailField(max_length=100)
        status = models.CharField(max_length=1)
        creator = models.CharField(max_length=20)
        cretime = models.DateTimeField(default=datetime.now)
        updator = models.CharField(max_length=20)
        updtime = models.DateTimeField(default=datetime.now, blank = True )

Ответы [ 2 ]

0 голосов
/ 29 октября 2019
# This worked   
 name1 = str(request.GET.get('nam'))
    mobile1 = str(request.GET.get('mob'))
    sponsor1 = str(request.GET.get('spo'))
    status1 = str(request.GET.get('stat'))
    if (name1 is not None and name1 != ''):
        customers_list = customers_list.filter(name=name1)

    if (mobile1 is not None and mobile1 != ''):
        customers_list = customers_list.filter(mobile=mobile1)

    if (sponsor1 is not None and sponsor1 != ''):
        customers_list = customers_list.filter(sponsor=sponsor1)

    if (status1 is not None and status1 != ''):
        customers_list = customers_list.filter(status=status1)
    ctx = {'customer': customers_list}
    return render(request, 'pages/customer_view.html', ctx) 
0 голосов
/ 26 октября 2019

Просто не указывайте условия фильтрации, если пользователь не вводит эти значения.

Например:

customers = customer.objects.all()

if mobile1:
    customers = customers.filter(mobile=mobile1)

if sponsor1:
    customers = customers.filter(sponsor=sponsor1)

# ...

Обратите внимание, что только в первой строке я использовал модель (customer) напрямую, после этого я всегда повторно использовал набор запросов (customers), поскольку вы можете уточнить запрос в несколько этапов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...