我的模型表单继承自子系统表单。 我想限制表单中用户的选择。 (特别是这个名字) 我知道我必须使用小部件。但它不起作用。
我必须使用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)
}
答案 0 :(得分:5)
来自django model forms documentation:
如果你明确地实例化这样的表单字段,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
作为参数发送。请记住,选择应该是一个查询集。
另外,您应该阅读How do I filter ForeignKey choices in a Django ModelForm?
答案 1 :(得分:3)
SUBSYSTEM_CHOICES
不是choices
属性的有效值,因为它没有键/值对。你需要这样的东西:
SUBSYSTEM_CHOICES = (
(a1, 'a1 Display'),
(a2, 'a2 Display'),
(a3, 'a3 Display'),
)