Если заявление в Python / Django - PullRequest
       0

Если заявление в Python / Django

0 голосов
/ 11 февраля 2020

Я пытаюсь сделать простой оператор if в python. У меня есть два поля в моей модели, которые соответствуют цене (price и discount_price). Я хотел бы отфильтровать результаты по цене, но я не уверен, как написать заявление if. Это должно go примерно так: если «discount_price существует», то отфильтровать, используя «discount_price», если не использовать поле «цена».

my views.py

def HomeView(request):
  item_list = Item.objects.all()
  category_list = Category.objects.all()
  query = request.GET.get('q')

  if query:
      item_list = Item.objects.filter(title__icontains=query)

  cat = request.GET.get('cat')
  if cat:
      item_list = item_list.filter(category__pk=cat)

  price_from = request.GET.get('price_from')
  price_to = request.GET.get('price_to')

  if price_from:
      item_list = item_list.filter(price__gte=price_from)

  if price_to:
      item_list = item_list.filter(price__lte=price_to)

  paginator = Paginator(item_list, 10)

  page = request.GET.get('page')

  try:
      items = paginator.page(page)
  except PageNotAnInteger:
      items = paginator.page(1)
  except EmptyPage:
      items = paginator.page(paginator.num_pages)

  context = {
      'items': items,
      'category': category_list
  }
  return render(request, "home.html", context)

1 Ответ

3 голосов
/ 11 февраля 2020

Используйте Coalesce для получения первого установленного значения

from django.db.models.functions import Coalesce
.annotate(current_price=Coalesce('discount_price','price')).filter(current_price...)

Пример использования комментария

 item_list = item_list.annotate(current_price=Coalesce('discount_price','price'))
 if price_from:
    item_list = item_list.filter(current_price__gte=price_from)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...