Wie kann ich sicherstellen, dass mindestens eine Viele-zu-viele-Beziehung festgelegt ist?
Zum Beispiel: Wenn ich ein listing
-Modell mit einem image -Feld mit einer vielen zu vielen Beziehung zu images
habe. Wie kann ich sicherstellen, dass mindestens ein Bild festgelegt ist
Bonusfrage: Was wäre, wenn das Minimum etwas anderes wäre als eins? Was ist mit einem Maximum?
Sie können eine Funktion implementieren, um zu überprüfen, ob die Listing
-Instanz mindestens eine Bildinstanz hat, und diese Funktion mit dem Listing
-Modell verbinden. Signal pre_save
Es wird etwas wie sein (vorausgesetzt, Sie verwenden django 1.3)
%Vor%Hier müssen Sie Ihre eigene_Ausnahme implementieren
Der folgende Zusatz ist die Antwort auf die weiteren Fragen von PO
Die Implementierung von Listing.clean()
ist eine weitere Möglichkeit, dieselbe Validierungsregel zu erreichen. In der Tat ist dies der semantisch korrekte Ansatz, da Model.clean()
für benutzerdefinierte Modellvalidierungen gedacht ist. Die Verwendung dieses Ansatzes wäre jedoch weniger praktisch - zum Auslösen des clean()
müssten Sie entweder full_clean()
manuell aufrufen (wenn Sie kein Modellformular verwenden) oder is_valid()
(bei Verwendung des Modellformulars) manuell aufrufen, richtig vor dem Aufruf von save()
einer Listing-Instanz. Referenz
Andererseits können Sie bei der Methode pre_save
signal sicherstellen, dass die Validierungsregel immer auf Listing
instance angewendet wird, wenn Sie save()
für die Instanz aufrufen.
Es ist nicht richtig oder falsch, eine über die andere zu wählen, sondern lediglich eine Designentscheidung zu treffen. Mit beiden Ansätzen können Sie erreichen, was Sie benötigen, und die Geschäfts- / Domänenlogik (dh Ihre Validierungsregel) in der Modellebene beibehalten.
Tags und Links python django many-to-many validation model