supported - Mensaje de error de Django mostrado para campos únicos
which option does django templates accept (4)
Me gustaría cambiar el mensaje de error predeterminado cuando las entradas duplicadas intentan guardar cuando deberían ser únicas, es decir, unique=True
. Muy parecido a esto:
email = models.EmailField(unique=True, error_messages={''unique'':"This email has already been registered."})
Pero, unique
en el caso anterior fue una conjetura, y no funciona. Tampoco puedo averiguar cuál es el nombre del error en realidad. ¿Alguien sabe el nombre correcto?
Tenga en cuenta que esta validación es el nivel del modelo, no la validación de formularios
EDITAR: Un poco más de información, en el momento en que el mensaje de error actual se muestra en form.errors
:
[model_name] with this [field_label] already exists
Lo que no es muy fácil de usar, así que quise anularlo ...
Desde Django 1.4, el ejemplo exacto que suministras realmente funciona. ¿Tal vez encontraron su informe de errores y simplemente lo arreglaron?
https://github.com/django/django/blob/1.4.20/django/db/models/base.py#L780
El mensaje de error único lo construye django.db.models.base.unique_error_message
(al menos en Django 1.3).
Este mensaje de error aparentemente está codificado en el archivo django / db / models / base.py.
def unique_error_message(self, model_class, unique_check):
opts = model_class._meta
model_name = capfirst(opts.verbose_name)
# A unique field
if len(unique_check) == 1:
field_name = unique_check[0]
field_label = capfirst(opts.get_field(field_name).verbose_name)
# Insert the error into the error dict, very sneaky
return _(u"%(model_name)s with this %(field_label)s already exists.") % {
''model_name'': unicode(model_name),
''field_label'': unicode(field_label)
}
# unique_together
else:
field_labels = map(lambda f: capfirst(opts.get_field(f).verbose_name), unique_check)
field_labels = get_text_list(field_labels, _(''and''))
return _(u"%(model_name)s with this %(field_label)s already exists.") % {
''model_name'': unicode(model_name),
''field_label'': unicode(field_labels)
}
Una forma de resolver esto es crear su modelo personalizado derivado de EmailField y anular el método unique_error_message. Pero tenga en cuenta que podría romper cosas cuando actualice a versiones más recientes de Django.
Muchas gracias.
email = models.EmailField(unique=True, error_messages={''unique'':"This email has already been registered."})
esto funcionó muy bien ahora.
Si desea personalizar los forms.ModelForm
de forms.ModelForm
como invalided
, hágalo en forms.ModelForm
email = forms.EmailField(error_messages={''invalid'': ''Your email address is incorrect''})
Pero el mensaje unique
debe personalizarse en el campo del model
, como se mencionó anteriormente.
email = models.EmailField(unique=True, error_messages={''unique'':"This email has already been registered."})