En un formulario personalizado, ¿cómo valida uno la singularidad de un campo de modelo (es decir, tiene unique=True
establecido)?¿Cómo validar/limpiar() un campo único = True sin usar un ModelForm?
sé que ModelForm de Django realiza automáticamente una función validate_unique()
que se llama en el método de la BaseModelForm clean()
- por lo que, cuando se utiliza ModelForm, esto será manejado correctamente (como lo es en la administración).
Sin embargo, estoy creando mi propia forma de cero y se preguntan cómo puedo ir sobre el manejo de este mismo? Creo que mi mayor escollo es saber qué objeto está unido a la forma cuando se está limpiando los datos ...
Algunos código:
class UserProfile(CreatedModifiedModel):
user = models.ForeignKey(User, unique=True)
display_name = models.CharField('Display Name',max_length=30,
blank=True,unique=True)
class EditUserProfileForm(forms.Form):
display_name = forms.CharField(required=False,max_length=30)
# "notifications" are created from a different model, not the UserProfile
notifications = forms.MultipleChoiceField(
label="Email Notifications",
required=False,
widget=forms.CheckboxSelectMultiple,)
def clean_display_name(self):
# how do I run my own validate_unique() on this form?
# how do I know which UserProfile object I am working with?
# more code follows, including the __init__ which sets up the notifications
¿Hay alguna razón por la que está haciendo un formulario personalizado en lugar de un ModelForm? – tghw
actualicé el código para mostrar el campo de "notificaciones" que necesito, que proviene de una aplicación diferente pero que se maneja en el mismo EditUserProfileForm ... espero que tenga sentido. No creo que pueda hacer un ModelForm a partir de múltiples fuentes de modelos ... – thornomad