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')
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
querysetAttribut festlegen .
field = models.CharField(max_length=9, default='', blank=True)
Fügen Sie einfach blank=Truein 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
Sie müssten hinzufügen:
address = forms.CharField(required=False)
null=True, blank=Truewird 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:
null = True, blank = True bewirkt, dass das ModelForm-Feld erforderlich ist = False
Ich habe es gerade auf meinem ManyToMany-Feld in meiner UserProfileKlasse eingestellt und es hat einwandfrei funktioniert.
Meine UserProfileKlasse sieht jetzt so aus (beachten Sie das friendsFeld):
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 nullund blankzu True, Wetter Sie haben ein einfaches charFeld 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 :)
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.
Die obigen Antworten sind richtig; Beachten Sie jedoch, dass die Einstellung null=Trueauf 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 .