了解UpdateView以更改Form和FormWidget

时间:2015-02-16 11:10:28

标签: python django django-class-based-views

我仍然不理解UpdateView。它从哪里获取表格? 它具有模型中声明的字段,但不使用forms.py中定义的表单。

然而,我确实遵循了以下给出的答案:

How does one use a custom widget with a generic UpdateView without having to redefine the entire form?

在我的情况下,我在model.py中使用IntegerField并在Form中使用Radiobuttons。

所以UpdateView的作用是给我一个IntegerField而不是ChoiceField。即使我分配了RadioSelect小部件或选择字段:

观点:

class UpdateEinflussideen(UpdateView):

    model = Einflussideen
    EINFLUSS = [(10,'hoch'),(4,'mittel'),(1,'gering')]
    form_class = forms.models.modelform_factory(Einflussideen,
                    widgets={'einfluss': forms.ChoiceField(
                        choices=EINFLUSS, widget=forms.RadioSelect())},
                    )
    template_name = 'verbrauchererfassung/update_einflussideen.html'
    success_url = reverse_lazy('verbraucher')

模特:

class Einflussideen(models.Model):

    idee = models.CharField(max_length=100)
    einfluss = models.IntegerField()
    verbraucher = models.ForeignKey(Verbraucher)

1 个答案:

答案 0 :(得分:1)

python中的变量区分大小写。将属性form_Class更改为form_class。此外,widgets参数应包含值为Widget个实例的dict:

form_class = forms.models.modelform_factory(Einflussideen,
                 widgets={'einfluss': forms.RadioSelect(choices=EINFLUSS)})