J'ai un formulaire comme celui-ci:
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Comment puis-je mettre le champ d'adresse en option?
Je suppose que votre modèle est comme ceci:
class My_Class(models.Model):
address = models.CharField()
Votre formulaire:
class My_Form(ModelForm):
address = forms.CharField(required=False)
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
class My_Form(forms.ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
def __init__(self, *args, **kwargs):
super(My_Form, self).__init__(*args, **kwargs)
self.fields['address'].required = False
Il faudrait ajouter:
address = forms.CharField(required=False)
field = models.CharField(max_length=9, default='', blank=True)
Ajoutez simplement blank = True dans votre champ de modèle et cela ne sera pas requis lorsque vous utilisez des formulaires de modèle.
@ La solution d'Anentropic du commentaire sur @ la réponse d'Atma a fonctionné pour moi. Et je pense que c'est aussi le meilleur.
Son commentaire:
null = True, blank = True entraînera la nécessité du champ ModelForm = False
Je viens de le définir sur mon champ ManyToMany dans ma classe UserProfile
et cela a fonctionné parfaitement.
Ma classe UserProfile
ressemble maintenant à ceci (notez le champ friends
):
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
friends = models.ManyToManyField('self', null=True, blank=True)
Je pense aussi que c'est la plus belle solution puisque vous faites la même chose, mettez null
et blank
à True
, si vous avez un simple char
champ ou, comme je l'ai, ManyToMany
champ.
Encore une fois, merci beaucoup @Anentropic. :)
P.S. J'ai écrit cela comme un post car je ne pouvais pas commenter (j'ai moins de 50 points de réputation) mais aussi parce que je pense que son commentaire a besoin de plus de visibilité.
P.P.S. Si cette réponse vous a aidé, merci de bien vouloir noter son commentaire.
À votre santé :)