我的模型形式继承自子系统形式。
我想限制用户在表单中的选择。 (特别是名字)
我知道我必须使用小部件。但这不起作用。
我必须使用 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)
}
From Django 模型表单文档 https://docs.djangoproject.com/en/dev/topics/forms/modelforms/:
如果你像这样显式实例化一个表单字段,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 中过滤外键选项? https://stackoverflow.com/questions/291945/how-do-i-filter-foreignkey-choices-in-a-django-modelform
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)