Leer querysets in Django

Ich habe eine ListView in Django, dessen get_queryset () - Methode muss manchmal keine Ergebnisse zurückgeben. Ich habe versucht, drei Möglichkeiten, dies zu tun:

  1. return EmptyQuerySet()
  2. return Model.objects.none()
  3. return Model.objects.filter(pk=-1)

Jeder von diesen gibt ein etwas anderes Objekt.

  1. django.db.models.query.EmptyQuerySet mit seinem Modell-Attribut auf None
  2. django.db.models.query.EmptyQuerySet mit seinem Modell-Attribut auf Model
  3. django.db.models.query.QuerySet mit seinem Modell-Attribut auf Model

Nur die Dritte option arbeitet mit der Klasse anhand ListView. Die anderen Optionen Absturz auf ein Attribut Fehler, wenn das ListView-Steuerelement versucht, auf der Modell-Attribut. Das überrascht mich und ist ein Schmerz, wie es verlangt von mir, import-Modell in Orten, wo verursachen können MRO-Themen.

Was mache ich falsch/was sollte ich anders machen?

Update: Die Frage ist dann, was ist der richtige Weg, um wieder ein leeres queryset über die Klasse Ansicht die Methode get_queryset()?

Update: Hier ist die Linie in Djangos generic-views, trifft ein Attribut-Fehler beim Zugriff auf die model Attribut: https://github.com/django/django/blob/stable/1.5.x/django/views/generic/list.py#L166.

  • Warum können Sie nicht verwenden Sie die zweite option, EmptyQuerySet hat ein model-Attribut in diesem Fall.
  • Allein der Gedanke daran macht mich denken, Sie haben die falsche Logik, setup, wenn Sie brauchen, um einen leeren queryset in einem listview. Sie sollten in der Lage sein zu handhaben, dass ohne einen Absturz oder so.
  • Sie würden denken, aber Django noch wirft ein Attribut Fehler in dieser Zeile: github.com/django/django/blob/stable/1.5.x/django/views/generic/...
  • Nachdem sich eine Liste mit 0 Elementen ist ein absolut vernünftig Ergebnis. Kunde x hat eine 0-Aufträgen für Beispiel.
  • Natürlich, aber das sollte nicht sein, eine leere queryset. Es sollte behandelt werden, indem Sie die Vorlage.
  • nicht sicher, wir sprechen über die gleiche Sache. Ich glaube nicht, dass Django die ListView sollte Absturz, wenn meine get_queryset () - Methode gibt ein EmptyQuerySet() oder ein Modell.Objekte.keine() Antwort.

InformationsquelleAutor Erik | 2013-04-28
Schreibe einen Kommentar