web-dev-qa-db-fra.com

Django modelform Champ NON obligatoire

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?

56
Andres

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')
69
Akshar Raaj
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
79
madzohan

Il faudrait ajouter:

address = forms.CharField(required=False)
5
Atma
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.

4
Diego Magalhães

@ 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é :)

3
Filip Savic