Ich habe ein 'abgebrochenes' Feld zu meinem Modell hinzugefügt, gibt es eine Möglichkeit, die Modell-Standardabfrage zu etwas wie abgebrochen zu ändern = Falsch? ohne alle meine Filter/Ausschluss-Abfragen zu ändern?Standard-Abfrage-Set in Django ändern
Antwort
Sie können dies mit einem benutzerdefinierten Modellmanager durchführen und die get_queryset
-Funktion überschreiben, um immer abgebrochen = False zu filtern.
Wenn dann MyModel.objects.all()
aufgerufen wird, werden abgebrochene Objekte immer ausgeschlossen. Hier ist ein Blogbeitrag, den ich zu dem Thema hilfreich fand. http://www.b-list.org/weblog/2006/aug/18/django-tips-using-properties-models-and-managers/
EDIT: Vielleicht ein besserer Ansatz mit einem benutzerdefinierten Manager wäre es als Objekte auf eine andere Eigenschaft, andere zu befestigen, wie zum Beispiel:
class MyModel(models.Model):
# Blah blah
active = CustomManager()
Und in Ihre Ansichten Ihre Anfragen wie MyModel.active.all()
aussehen würde.
EDIT2: Aktualisierte Methode Rechtschreibung von zu get_queryset
für moderne Versionen von Django.
Sie könnten benutzerdefinierte query manager schreiben, aber ich glaube nicht, dass dies der richtige Weg ist. Dies würde eine implizite, versteckte Bedingung für einen Filter darstellen, die Code unlesbar machen würde. Erinnere dich Zen von Python: Explicit is better than implicit
. Ermitteln Sie Orte, an denen Sie abgebrochene hinzufügen müssen = False und fügen Sie einfach das hinzu, so sollten Sie dies tun.
Ich stimme überhaupt nicht zu. Was wäre dann der Zweck, benutzerdefinierte Manager zu haben? Was ist so implizit über 'not_cancelled = CustomManager()' und dann über MyModel.not_cancelled.all()? – jonwd7
- 1. Django - Basen in Migrationen ändern
- 2. Passwort ändern in Django Admin
- 3. Ändern von Formularfeldern in Django
- 4. Ändern django Vorlagen Pfad
- 5. Django Passwort ändern
- 6. Django Formularfeld Fehlermeldung ändern
- 7. Ändern Django/Aldryn Standard
- 8. Python django ändern Feldattribut
- 9. Ändern der Zeilenfarbe in Django Admin-Liste
- 10. Django ändern Dateiname in PDF-Export
- 11. Anklickbares Feld in Django ändern admin list_display
- 12. Ändern des Passwortes in Django mit AJAX
- 13. Ändern von Daten in einer django Modelform
- 14. Ändern Standardformular für Feld in Django
- 15. Ändern Feldtyp in einem Django ModelFormset
- 16. Ändern Sie den Feldnamen in django admin
- 17. Django Ansicht globale Variable ändern
- 18. Django admin ändern Plural Modellnamen
- 19. Django Admin-Site ändern speichern
- 20. Django den Standard-Objektmanager ändern
- 21. Django Admin-Listen-Layout ändern
- 22. Django: Bildgröße ändern und laden
- 23. Django Fremdschlüsseldaten ändern und speichern
- 24. django Sitzungsschlüssel bei Authentifizierung ändern
- 25. Django-Formulare: help_text dynamisch ändern
- 26. ändern Spaltentyp mit django Migrationen
- 27. ändern verbose_name für is_superuser Django
- 28. Django Formular Customizing: ändern Feld auf anderen Feld ändern
- 29. Nicht in der Lage Dir zu ändern in virtualenv Django
- 30. Django Sprache ändern Anchors vs. Optionen
Sie müssen SEHR SEHR vorsichtig mit dem Überschreiben von Standard-Manager einfach so sein. In diesem speziellen Fall wird der einmal gelöschte Gegenstand nie mit filter()/get() gefunden. –
Einverstanden. Würde ich diesen Ansatz in der Regel durch Überschreiben von get() ergänzen, um diesen Filter nicht zu verwenden, wenn pk angegeben wird. Wahrscheinlich möchten Sie auch das Admin-Abfrage-Set so ändern, dass alle einschließlich abgebrochen zurückgegeben werden. Wenn Sie in Ihren Abfragen jedoch selten abgebrochene Elemente wünschen, kann dies ein sinnvoller Ansatz sein. –
Hallo, gibt es eine Möglichkeit, das Verhalten von get_query_set zu ändern, um zusätzliche Parameter zu verwenden, d. H. Von irgendwoher weitergegeben, oder globale Variablen wie aktuelle Login-Benutzerinformationen zu verwenden? Vielen Dank! – ultrajohn