2016-07-06 2 views
0

In einem Feld meines Django-Modells möchte ich, dass der Benutzer am Ende eines Textfelds einen Punkt ('.') Eingibt. Ansonsten möchte ich es hinzufügen.Verwenden Sie einen Validator, um ein Feld zu ändern/speichern statt einen Fehler auszulösen

Ich habe darüber nachgedacht, eine Prüfung verwendet werden, aber es scheint es nicht der richtige Weg, es zu tun:

name = models.TextField(validators=[validate_dot]) 

def validate_dot(value): 
    if value: 
     if value[-1] != '.': 
      return value + '.' 

Whay Ich brauche den Wert des TextField- zu ändern ist (falls erforderlich) nicht zu erhöhen Error.

Was ist der beste Ansatz, um es zu erreichen?

+0

Mögliche Duplikat [Ist das die Art und Weise Django Modellfelder zu validieren?] (Http://stackoverflow.com/questions/12945339/is-this-the-way-to-validate-django-model- Felder) – Sayse

+0

Wie wäre es, es clientseitig, in der 'onchange' Methode des Feldes oder der' onsubmit' Methode des Formulars zu tun? Dies kann den zusätzlichen Vorteil haben, dass der Benutzer tatsächlich den hinzugefügten Punkt sieht. – raphv

+0

Da dieser Wert in DB gespeichert werden soll, überprüfe ich dieses Problem lieber serverseitig. Auf jeden Fall könnte ich es auch in der Cliend-Seite überprüfen. – loar

Antwort

0

Sie können die Methode save() in Ihrem Modell überschreiben.

def save(self, *args, **kwargs): 
    if not self.name.endswith("."): 
     self.name = self.name + "." 
    super(Model, self).save(*args, **kwargs) 
Verwandte Themen