Ich habe eine Form wie diese:
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Wie kann ich das Adressfeld als optional festlegen?
Ich habe eine Form wie diese:
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Wie kann ich das Adressfeld als optional festlegen?
Antworten:
Schätze, dein Modell ist so:
class My_Class(models.Model): address = models.CharField()
Ihr Formular für die Django-Version <1.8:
class My_Form(ModelForm): address = forms.CharField(required=False) class Meta: model = My_Class fields = ('first_name', 'last_name' , 'address')
Ihr Formular für Django Version> 1.8:
class My_Form(ModelForm): address = forms.CharField(blank=True) class Meta: model = My_Class fields = ('first_name', 'last_name' , 'address')
quelle
abc=models.ForeignKey(Abc)
, können Sie schreibenabc = forms.ModelChoiceField(queryset=Abc.objects.all(), required=False)
from django import forms
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
quelle
queryset
Attribut festlegen .field = models.CharField(max_length=9, default='', blank=True)
Fügen Sie einfach
blank=True
in Ihrem Modellfeld und es wird nicht erforderlich sein , wenn Sie modelforms verwenden.Quelle: https://docs.djangoproject.com/de/3.1/topics/forms/modelforms/#field-types
quelle
Sie müssten hinzufügen:
address = forms.CharField(required=False)
quelle
null=True, blank=True
wird dazu führen, dass das ModelForm-Feldrequired=False
Die Lösung von @ Anentropic aus dem Kommentar zu @ Atmas Antwort hat bei mir funktioniert. Und ich denke, es ist auch das Beste.
Sein Kommentar:
Ich habe es gerade auf meinem ManyToMany-Feld in meiner
UserProfile
Klasse eingestellt und es hat einwandfrei funktioniert.Meine
UserProfile
Klasse sieht jetzt so aus (beachten Sie dasfriends
Feld):class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) friends = models.ManyToManyField('self', null=True, blank=True)
Ich denke auch , dass dies die schönste Lösung ist , da Sie die gleiche Sache, put tun
null
undblank
zuTrue
, Wetter Sie haben ein einfacheschar
Feld oder, wie ich,ManyToMany
Feld.Nochmals vielen Dank @Anentropic. :) :)
PS Ich habe dies als Beitrag geschrieben, da ich keinen Kommentar abgeben konnte (ich habe weniger als 50 Ruf), aber auch, weil ich denke, dass sein Kommentar mehr Aufmerksamkeit erfordert.
PPS Wenn diese Antwort Ihnen geholfen hat, bestätigen Sie bitte seinen Kommentar.
Prost :)
quelle
Lösung: Verwenden Sie beide
blank=True
,null=True
.my_field = models.PositiveIntegerField(blank=True, null=True)
Erläuterung:
wenn du benutzt
null=True
`my_field = models.PositiveIntegerField(null=True)`
dann ist my_field erforderlich, mit * in der Form kann kein leerer Wert übermittelt werden.
wenn du benutzt
blank=True
`my_field = models.PositiveIntegerField(blank=True)`
dann ist my_field nicht erforderlich, nein * dagegen in form, du kannst keinen wert einreichen. Wird aber null Feld nicht erlaubt bekommen.
Hinweis:
1) marking as not required and 2) allowing null field are two different things.
Pro-Tipp:
Read the error more carefully than documentation.
quelle
Die obigen Antworten sind richtig; Beachten Sie jedoch, dass die Einstellung
null=True
auf einem ManyToManyField keine Auswirkungen auf Datenbankebene hat und bei der Migration die folgende Warnung auslöst:(fields.W340) null has no effect on ManyToManyField.
Eine gute Antwort darauf wird in diesem anderen Thread erklärt .
quelle