【问题标题】:Unable to save the data from checkboxes and radiobuttons using modelForm无法使用 modelForm 保存复选框和单选按钮中的数据
【发布时间】:2016-09-11 23:22:14
【问题描述】:

模型.py

    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 列表中定义的手动值。

【问题讨论】:

    标签: python django forms modelform


    【解决方案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())
    

    【讨论】:

    • 这是一个愚蠢的错误...谢谢。但这并不能解决radio_buttons 的问题。它仍然只保存 TrueFalse 而我需要 CHOICES 列表中定义的值 1 或 2 或 3。
    • 你应该通过放置断点来检查你在保存表单时得到的值是对还是错。
    猜你喜欢
    • 2017-09-20
    • 2018-02-14
    • 2015-09-05
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多