Django: ORDER BY DESC на FloatField ставит нулевые значения на вершину? - PullRequest
2 голосов
/ 31 декабря 2010

Я удивлен, обнаружив, что запрос 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 последними (т. Е. В Берлине, Тунисе, Лондоне, Париже). Есть ли способ сделать это?

1 Ответ

2 голосов
/ 31 декабря 2010

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

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

...