2016-05-16 61 views
-1

model.py無法使用的ModelForm

class FormData(models.Model): 
     email = models.EmailField() 
     full_name = models.CharField(max_length=120) 
     text_area = models.CharField(max_length=250) 
     radio_buttons = models.CharField(max_length=25) 
     check_boxes = models.CharField(max_length=10) 
     def __unicode__(self): 
      return self.email 

forms.py

class MyModelForm(forms.ModelForm): 
     class Meta: 
      model = FormData 
      fields = ['text_area','email','full_name'] 
      widgets = { 
       'text_area': Textarea(attrs={'cols': 50, 'rows': 10}), 
      } 
     TYPE_CHOICES = [('s', 'small'),('m', 'medium'),('b', 'big')] 
     check_boxes = forms.MultipleChoiceField(choices=TYPE_CHOICES, widget=forms.CheckboxSelectMultiple()) 

     CHOICES = [(1, 'One'),(2, 'Two'),(3, 'Three'),(4, 'Four')] 
     radio_buttons = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect()) 

views.py

def home(request): 
     title = 'Welcome' 
     form = MyModelForm(request.POST) 
     context = {"title":title,"form":form} 

     if form.is_valid(): 
      instance = form.save(commit=False) 
      instance.save() 
      context = {"title":"Thank You!"} 

     return render(request,"home.html",context) 

home.html做爲

來保存從複選框和單選按鈕的數據
<h1>{{title}}</h1> 
    <form method='POST' action=''>{% csrf_token %} 
     {{form.as_p}} 
     <input type="submit" value="Submit"> 
    </form> 

問題是我似乎無法理解如何保存來自checkboxesradiobuttons的數據。表單被成功提交,但是當我查看數據庫時,check_boxes的字段爲空,並且radio_buttons字段顯示的值爲「False」,而我需要我在CHOICES列表中定義的手動值。

回答

1

您在表格中添加了兩個額外的字段,您在fields中未提及。像這樣改變你的表格。

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = FormData 
     fields = ['text_area','email','full_name', 'check_boxes', 'radio_buttons'] 
     widgets = { 
      'text_area': Textarea(attrs={'cols': 50, 'rows': 10}), 
     } 
    TYPE_CHOICES = [('s', 'small'),('m', 'medium'),('b', 'big')] 
    check_boxes = forms.MultipleChoiceField(choices=TYPE_CHOICES, widget=forms.CheckboxSelectMultiple()) 

    CHOICES = [(1, 'One'),(2, 'Two'),(3, 'Three'),(4, 'Four')] 
    radio_buttons = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect()) 
+0

這是一個愚蠢的錯誤......謝謝。但是這並不能解決'radio_buttons'的問題。它仍然只保存'True'或'False',而我需要'CHOICES'列表中定義的值1或2或3。 –

+0

您應該通過放置斷點來檢查,如果您在保存表單時獲得正確或錯誤的價值。 –