2016-12-06 1 views
1

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?

Antwort

1

Validatoren haben nichts mit dem Speichern des Modells zu tun - abgesehen von der Tatsache, dass sie vor dem Speichern überprüft werden sollten.

docs

Beachten Sie, dass sich automatisch, wenn Sie ein Modell speichern, werden nicht Validierer laufen, aber wenn Sie eine Modelform verwenden, wird es Ihre Validatoren auf allen Feldern ausführen, die in dem Formular enthalten sind.

Entweder sicherzustellen, dass Sie streng mit, wie Sie Objekte erlauben erstellt werden oder Sie können einen pre_save signal

+0

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

+0

@Julius - Das hat nichts mit Validatoren zu tun, es ist höchstwahrscheinlich ein Fehler in Ihrem eigenen Code, form_invalid ruft nicht auf – Sayse

+0

@Julius - Zufallsstab im Dunkeln, aber ich nehme an, dass Ihr 'form_invalid'' super heißt .form_valid' – Sayse

Verwandte Themen