Dans un formulaire personnalisé, comment peut-on valider l'unicité du champ d'un modèle (c'est-à-dire, a unique=True
ensemble)?Comment valider/nettoyer() un champ unique = True sans utiliser ModelForm?
Je sais que ModelForm de django exécute automatiquement une fonction validate_unique()
qui est appelée dans la méthode clean()
du BaseModelForm - donc, lors de l'utilisation ModelForm, ce sera possible de traiter correctement (comme dans l'Admin).
Cependant, je crée ma propre forme à partir de zéro et je me demande comment je peux gérer cela moi-même? Je pense que mon plus grand bloc d'achoppement est de savoir quel objet est attaché à la forme lorsque les données sont en cours de nettoyage ...
Certains code:
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
Y a-t-il une raison pour laquelle vous créez un formulaire personnalisé au lieu d'un ModelForm? – tghw
J'ai mis à jour le code pour montrer le champ "notifications" dont j'ai besoin qui est d'une application différente, mais manipulé sur le même EditUserProfileForm ... espérons que cela a du sens. Je ne pense pas que je peux faire un ModelForm à partir de plusieurs sources de modèles ... – thornomad