2010-12-30 12 views
2

Ich bin überrascht zu finden, dass eine Abfrage ORDER BY DESC auf einem FloatField in Django Nullfelder höher als Felder mit positiven Werten zurückgibt.Django: ORDER BY DESC auf FloatField setzt Nullwerte oben?

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

ich wieder folgendes:

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

Stattdessen möchte ich in absteigender Reihenfolge alle Einträge zurück, mit der None letzten Werte (das heißt Berlin, Tunis, London, Paris). Irgendeine Möglichkeit, dies zu tun?

+1

Vielleicht hilft das folgende Q/A: http://stackoverflow.com/questions/7749216/django-order-by-date-but-have-none-at-end – OBu

Antwort

2

Ich denke, Django macht keine Annahme über die Bestellung von NULL. Verschiedene SQL-Datenbanken handhaben diese Reihenfolge unterschiedlich - SQLite/MySQL setzt NULL am oberen, Oracle am unteren Ende (für aufsteigende ORDER BY-Klauseln). Das ist wahrscheinlich ein Problem, dass Django diese Unterschiede nicht "abstrahiert".

In den meisten Anwendungsfällen macht es jedoch keinen Sinn, NULL in sortierte Abfrageergebnisse aufzunehmen. Wenn Sie wirklich einen Anwendungsfall haben, wo Sie es brauchen, sollten Sie wahrscheinlich manuell sortieren (d. H. Nach der Abfrage).

Verwandte Themen