4

我的模型形式继承自子系统形式。我想限制表单中用户的选择。(特别是名字)我知道我必须使用小部件。但它不起作用。

我必须使用 SubsytemForm。

SUBSYSTEM_CHOICES = (a1,a2,a3)


class Subsystem(models.Model):
    name = models.CharField("Name", max_length=20)


class SubsytemForm(forms.ModelForm):   
    class Meta:
        model = Subsystem
        widgets = {
            'name': ChoiceField(widget=RadioSelect, choices=SUBSYSTEM_CHOICES)
        }
4

2 回答 2

5

来自django 模型表单文档

如果你像这样显式地实例化一个表单域,Django 假设你想要完全定义它的行为;因此,默认属性(例如 max_length 或 required)不是从相应的模型中提取的。如果要保持模型中指定的行为,则必须在声明表单字段时显式设置相关参数。

您可以尝试:

class SubsytemForm(forms.ModelForm):  
    name =  forms.ChoiceField(widget=RadioSelect, choices= choices )
    class Meta:
        model = Subsystem

你也可以

class SubsytemForm(forms.ModelForm):  
    class Meta:
        model = Subsystem
    def __init__(self, *args, **kwargs):
        self.name_choices = kwargs.pop('name_choices', None)
        super(SubsytemForm,self).__init__(*args,**kwargs)
        self.fields['name'].queryset= self.name_choices  

并在创建name_choices时作为参数发送。SubsytemForm请记住,选择应该是一个查询集。

另外,您应该阅读如何在 Django ModelForm 中过滤 ForeignKey 选择?

于 2012-07-11T13:53:17.330 回答
3

SUBSYSTEM_CHOICES不是属性的有效值,choices因为它没有键/值对。你需要类似的东西:

SUBSYSTEM_CHOICES = (
    (a1, 'a1 Display'),
    (a2, 'a2 Display'),
    (a3, 'a3 Display'),
)
于 2012-07-11T14:56:08.930 回答