Django: ORDER BY DESC на FloatField ставит нулевые значения сверху?

Я удивлен, обнаружив, что запрос ORDER BY DESC для FloatField в Django возвращает нулевые поля выше, чем поля с положительными значениями.

# In models.py
class City(models.Model):
    name = models.CharField(max_length=30)
    country = models.ForeignKey(Country)
    value = models.FloatField(null=True, blank=True)
# In views.py
    cities = City.objects.filter(country__id=country.id).order_by('-value')
# In template.html
    {% for city in cities %}{{ city.name }}: {{ city.value }} --{% endfor %}

Я получаю следующее:

  London: None -- Paris: None -- Berlin: 84.0 -- Tunis: 15.0 --

Вместо этого я хочу вернуть все записи в порядке убывания, причем значения None будут последними (например, Берлин, Тунис, Лондон, Париж). Любой способ сделать это?


person AP257    schedule 30.12.2010    source источник
comment
Возможно, поможет следующий вопрос/ответ: stackoverflow.com/questions/7749216/   -  person OBu    schedule 30.08.2013


Ответы (1)


Я думаю, что Django не делает никаких предположений о порядке NULL. Различные базы данных SQL обрабатывают этот порядок по-разному - SQLite/MySQL помещают NULL вверху, Oracle внизу (для предложений ORDER BY по возрастанию). Так что, вероятно, проблема в том, что Django не «абстрагируется» от этих различий.

Но в большинстве случаев нет смысла включать значения NULL в отсортированные результаты запроса. Если у вас действительно есть вариант использования, в котором вам это нужно, вам, вероятно, следует сортировать вручную (т.е. после выполнения запроса).

person AndiDog    schedule 30.12.2010