我很惊讶地发现Django中FloatField上的ORDER BY DESC查询返回的空字段高于具有正值的字段。
# 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值(即柏林,突尼斯,伦敦,巴黎)。有什么办法吗?
答案 0 :(得分:2)
我认为Django没有对NULL的排序做出任何假设。不同的SQL数据库处理不同的排序 - SQLite / MySQL将NULL放在顶部,Oracle放在底部(用于升序ORDER BY子句)。所以这可能是Django没有“抽象”这些差异的问题。
但是在大多数用例中,在排序查询结果中包含NULL是没有意义的。如果你确实有一个需要它的用例,你应该手动排序(即在进行查询后)。