Mam formularz takiego:Django ModelForm nie jest wymagane pole
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Jak mogę umieścić pole adresu jako opcjonalny?
Mam formularz takiego:Django ModelForm nie jest wymagane pole
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Jak mogę umieścić pole adresu jako opcjonalny?
Guess model jest tak:
class My_Class(models.Model):
address = models.CharField()
Twoja forma:
class My_Form(ModelForm):
address = forms.CharField(required=False)
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Co z polem klucza obcego? – digz6666
Użyj ModelChoiceField. Tak więc, jeśli definicje pól to 'abc = models.ForeignKey (Abc)', możesz napisać 'abc = forms.ModelChoiceField (queryset = Abc.objects.all(), required = False)' –
Upewnij się, że formularze są importowane, jeśli nie używałeś go wcześniej: 'from django import forms' –
Trzeba by dodać:
address = forms.CharField(required=False, blank=True, null=True)
Puste i puste atrybuty nie są używane dla ModelForms –
powinno to być w polu _model_, a nie w polu formularza. 'null = True, puste = True' spowoduje, że pole ModelForm będzie" required = False " – Anentropic
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
Mimo, że odpowiedź akshar wygląda lepiej, ta metoda zapobiega konieczności robienia rzeczy, aby ustawić takie rzeczy jak help_text i label. – Blackeagle52
Ta metoda jest szczególnie pomocna w przypadku pól zdefiniowanych jako FK na poziomie modelu. Metodą akshara należałoby ustawić atrybut 'queryset'. – PritishC
@ rozwiązania Anentropic jest z komentarzem na @Atma's answer pracował dla mnie. I myślę, że to też jest najlepsze.
Jego komentarz:
wartość null = True, blank = True spowoduje pole ModelForm być wymagane = False
po prostu ustawić go na moim polu ManyToMany w moim UserProfile
klasy i jej działało bez zarzutu.
Moja UserProfile
klasa teraz wygląda następująco (zauważ pole friends
):
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
friends = models.ManyToManyField('self', null=True, blank=True)
Myślę też, że jest to najpiękniejsza rozwiązanie, ponieważ robisz to samo, umieścić null
i blank
do True
, pogoda masz proste pole char
lub, tak jak ja mam, ManyToMany
.
Ponownie, dzięki alot @Aentrentropic. :)
P.S. Napisałem to jako post, ponieważ nie mogłem komentować (mam mniej niż 50 punktów reputacji), ale także dlatego, że uważam, że jego komentarz wymaga więcej ekspozycji.
P.P.S. Jeśli ta odpowiedź ci pomogła, rozwiąż jego komentarz.
Pozdrowienia :)
Jak wygląda model? – Ngenator