Wie kann ich den „eindeutigen“ Fehler in einem ModelForm-Feld überschreiben?
-
21-12-2019 - |
Frage
Ich versuche, die „eindeutige“ Fehlermeldung für ein Feld in meiner ModelForm zu überschreiben.Ich versuche dem zu folgen Dokumente für Django 1.6, aber ich bekomme es nicht zum Laufen.Ziemlich einfaches Zeug, ich habe:
models.py:
class EmailAddress(Model):
"""An email address."""
address = EmailField(unique=True)
def __unicode__(self):
return self.address
Ansichten.py:
class EmailAddressForm(ModelForm):
class Meta:
model = EmailAddress
fields = {'address'}
error_messages = {
'address': {
u'unique': _('That address has already been added.'),
}
}
Wenn ich eine doppelte E-Mail-Adresse eingebe, erhalte ich Folgendes:
emailaddress_form.errors = {'address': [u'Email address with this Address already exists.']}.`
Ich habe im Quellcode herumgestöbert und soweit ich das beurteilen kann, übergebe ich den error_messages
Diktieren Sie richtig, wo es von der abgeholt wird django.forms.models.fields_for_model
Funktion, die von der Metaklasse aufgerufen wird.Hoffentlich übersehe ich etwas Offensichtliches.Irgendwelche Vorschläge?
Lösung
Versuche dies :-
Adressfeld ändern in:-
address = models.EmailField(unique=True, error_messages={'unique':"Diese Adresse wurde bereits hinzugefügt."})
Andere Tipps
Erstellen Sie eine Methode „clean_address“ für die Klasse EmailAddressForm. Hoffentlich wird Ihr Problem dadurch behoben.
def clean_address(self):
"""Prevent duplicate email addresses."""
if 'email' in self.changed_data:
if self.Meta.model.all().filter('address =', self.cleaned_data['address']).count():
raise forms.ValidationError('Email address with this Address already exists.: %s.' %
self.cleaned_data['address'])
return self.cleaned_data['address']