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
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
Sie müssten hinzufügen:
address = forms.CharField(required=False)
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:
null = True, blank = True bewirkt, dass das ModelForm-Feld erforderlich ist = False
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 das friends
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
und blank
zu True
, Wetter Sie haben ein einfaches char
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 :)
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=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 .