2010-12-30 2 views
2

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

# 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 -- 

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

+1

Возможно, следующие ответы на вопросы: http://stackoverflow.com/questions/7749216/django-order-by-date-but-have-none-at-end – OBu

ответ

2

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

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

Смежные вопросы