Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-使用单选按钮而不是选择表单组件_Python_Django - Fatal编程技术网

Python Django-使用单选按钮而不是选择表单组件

Python Django-使用单选按钮而不是选择表单组件,python,django,Python,Django,我有几个用于构建调查的ModelForms,它们的模型包含很多问题(每个问题>30个)。目前,多项选择题表示为元素,但为了改进用户体验,我想将其改为单选按钮 由于它是一个模型表单,我依靠django自动在表单上创建字段。因此,虽然我知道通过这样做可以更改表单上的每个字段: class SurveyForm(ModelForm): ... field_one = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())

我有几个用于构建调查的
ModelForm
s,它们的模型包含很多问题(每个问题>30个)。目前,多项选择题表示为
元素,但为了改进用户体验,我想将其改为单选按钮

由于它是一个
模型表单
,我依靠django自动在表单上创建字段。因此,虽然我知道通过这样做可以更改表单上的每个字段:

class SurveyForm(ModelForm):
   ...
   field_one = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())
这些定义目前并不存在,我必须创建至少150个这样的定义。我确信有更好的方法来覆盖小部件选择的位置(可能是扩展ModelForm?)。或者,我可以通过将小部件附加到字段定义来实现这一点吗


我已经浏览了Django文档和源代码,但找不到为带有
选项的模型字段选择小部件的位置。

我的第一个想法是您可以使用。但是,这是行不通的,因为您只想覆盖有选项的
models.CharField
s的小部件,而不是所有
models.CharField
s

一种方法是在
\uuuu init\uuuu
方法中循环表单的字段,并将任何窗口小部件从
表单中更改。选择
表单。放射性输入

class SurveyForm(forms.ModelForm):
    class Meta:
        model = Survey
        fields = ('field_one', 'field_two', ...)

    def __init__(self, *args, **kwargs):
        super(SurveyForm, self).__init__(*args, **kwargs)
        for field in self.fields.values():
            if isinstance(field.widget, forms.Select):
                field.widget = forms.RadioSelect()
如果您有许多这样的表单,那么可以将功能提取到mixin中

class MyModelForm(ModelForm):
    class Meta:
        widgets = {
            'field_one': forms.RadioSelect(),
        }
也许你会喜欢这个:

widgets = {field: forms.RadioSelect() for field in ['field_one', 'field_two']}

我不想列举这样的字段,每种形式大约有30个字段,这与调查的变化联系太紧密了。是的,当然。这只是一个选择。你选择答案。在我的例子中,我确实想列举字段,所以谢谢你给我这个提示!