Ich kann den Minimalwert Validator auf dem Modell setzen:Verwendung Django Modell Integer Validator Werte auf dem Formular
class MyModel(Model):
my_field = models.fields.IntegerField(default=250, validators=[MinValueValidator(30)])
Dann erstelle ich ein Formular, um das vorherige Modell:
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ('my_field',)
Die Formular wird validiert, die korrekte Fehlermeldung wird angezeigt (wenn der eingegebene Wert < 30 ist), aber selbst wenn ein falscher Wert eingegeben wird, wird er auf der Instanz gespeichert!
konnte ich es durch die Angabe (wieder) machen arbeiten, um den Minimalwert auf dem Formular:
class MyForm(ModelForm):
my_field = form.IntegerField(min_value=30)
class Meta:
model = MyModel
fields = ('my_field',)
Aber auf diese Weise ist der Code nicht trocken - ich brauche die doppelten Wert und Feldtyp angeben.
Kann ich das irgendwie vermeiden? Oder zumindest den min_value vom Model Validator bekommen?
Vielen Dank für Ihre Antwort speichern oder teilen außer Kraft setzen müssen. Wie kommt es, dass "form_invalid" dann ausgelöst wird, dass "etwas nicht stimmt", aber die Instanz trotzdem gespeichert wird? – Julius
@Julius - Das hat nichts mit Validatoren zu tun, es ist höchstwahrscheinlich ein Fehler in Ihrem eigenen Code, form_invalid ruft nicht auf – Sayse
@Julius - Zufallsstab im Dunkeln, aber ich nehme an, dass Ihr 'form_invalid'' super heißt .form_valid' – Sayse