Angenommen, ich möchte ein Modell erstellen und aktualisieren. Welche Felder angezeigt werden und der Typ der Validierung hängt von der Aktion ab (Erstellen oder Aktualisieren). Aber sie teilen immer noch die gleiche Validierung und Funktionalität. Gibt es einen sauberen Weg, um ein ModelForm behandeln zu lassen (neben wenn nur Instanz überall existiert) oder sollte ich nur zwei verschiedene Modellformen erstellen?Django-Entwurfsmuster - Formulare zum Erstellen und Aktualisieren eines Modells
5
A
Antwort
4
Zwei Möglichkeiten fallen mir ein. Sie könnten ein Attribut in dem __init__
des Formular Verfahren eingestellt, entweder basierend auf einem Parameter übergeben Sie ausdrücklich oder basierend darauf, ob self.instance
existiert und haben eine nicht-None pk:
class MyModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
# either:
self.edit = kwargs.pop('edit', False)
# or:
self.edit = hasattr(self, instance) and self.instance.pk is not None
super(MyModelForm, self).__init__(*args, **kwargs)
# now modify self.fields dependent on the value of self.edit
Die andere Option ist Ihre Modelform zu Unterklasse - Behalte die gemeinsame Funktionalität in der Basisklasse und dann die spezifische Erstellungs- oder Aktualisierungsfunktion in den Unterklassen.
Verwandte Themen
- 1. Verschachtelte Formulare scheitern bei Verwendung eines ActiveResource-Modells, Rails 4
- 2. Datumsformatierung beim Erstellen eines Modells
- 3. Aktualisieren eines Modells während in before_update
- 4. Rails Art der Fehlerbehandlung zum Erstellen eines Modells
- 5. Wo finde ich SQL-Anweisungen zum Erstellen eines EAV-Modells?
- 6. Erstellen eines Modells mit Array-Mitgliedern
- 7. Angular - Verwenden des gleichen Formulars zum Erstellen und Aktualisieren
- 8. Die beste Methode zum Aktualisieren eines LINQ-Modells aus einem Formular
- 9. Django: Erstellen eines Modells für eine Drittanbieterklasse
- 10. Xamarin-Formulare, Pull zum Aktualisieren von listView in UWP
- 11. Datenbank- und Beziehungsdesign beim Unterklassen eines Modells
- 12. Wie man mapc zum Kompilieren eines Mapping-Modells
- 13. MVC und Lambda zum Erstellen eines Datensatzes
- 14. Standardmethode zum Aktualisieren eines Abonnements in Braintree?
- 15. Speichern und Laden eines Modells in R
- 16. MVC - Implementierung eines Modells
- 17. Kreuzvalidierung eines CART-Modells
- 18. Aliasing eines Modells in ngtemplate
- 19. Windows-Formulare erstellen Datumsformat
- 20. Rails Form zum Erstellen mehrerer Einträge desselben Modells
- 21. Sencha Architekt: Untermodellierung eines Modells
- 22. Beispiel zum Bereitstellen eines Tensorflow-Modells über eine RESTful-API
- 23. Referenzen zum Erstellen dynamischer Online-Formulare in .NET
- 24. Entwurfsmuster zum Konvertieren eines Modells in ein anderes Modell
- 25. Verwenden eines MVC-Modells zum Auffüllen und Validieren eines Kendo-Multiselects?
- 26. ember.js - was ist das richtige Controller/View-Muster zum Erstellen eines neuen Modells
- 27. Die beste Methode zum Laden eines Modells in Code-Signierer?
- 28. Erstellen einer Instanz eines Modells mit GenericForeignKey bei der Migration
- 29. Rails after_save Callback zum Erstellen eines zugeordneten Modells basierend auf column_changed?
- 30. Erstellen eines Backbone-Modells mit empfangenen JSON-Daten
cool, das habe ich mir auch gedacht. Ich frage mich, ob es einen besseren Weg dafür gibt, aber das sieht gut aus für mich. – killerbarney