2013-04-25 12 views

Odpowiedz

43

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') 
+1

Co z polem klucza obcego? – digz6666

+10

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)' –

+1

Upewnij się, że formularze są importowane, jeśli nie używałeś go wcześniej: 'from django import forms' –

5

Trzeba by dodać:

address = forms.CharField(required=False, blank=True, null=True) 
+3

Puste i puste atrybuty nie są używane dla ModelForms –

+2

powinno to być w polu _model_, a nie w polu formularza. 'null = True, puste = True' spowoduje, że pole ModelForm będzie" required = False " – Anentropic

59
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 
+3

Mimo, że odpowiedź akshar wygląda lepiej, ta metoda zapobiega konieczności robienia rzeczy, aby ustawić takie rzeczy jak help_text i label. – Blackeagle52

+3

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

2

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

Powiązane problemy