Django упорядочение по двум полям не работает должным образом - PullRequest
1 голос
/ 12 апреля 2020

Я работаю в магазине одежды, обуви и др. c. И я пытаюсь отсортировать товары по цене. Проблемы возникают, когда заполнено поле discount_price продукта, что означает, что этот продукт обесценен. Поэтому, когда я хочу заказать продукты на мой взгляд, я ожидаю увидеть продукты с более низкой скидкой_прайс, чем продукты с более высокой ценой, но это не работает так.

models.py

class Item(models.Model):
    price = models.IntegerField(null=True, blank=True)
    discount_price = models.IntegerField(null=True, blank=True)

запрос, который я выполняю

items = Item.objects.all().order_by('price', 'discount_price')

1 Ответ

1 голос
/ 12 апреля 2020

Вы можете использовать Coalesce(..) [Django -doc] для первой сортировки по 'discount_price', если это не NULL, и использовать price в противном случае:

from django.db.models.functions import Coalesce

items = Item.objects.order_by(<b>Coalesce('discount_price', 'price').asc()</b>)
...