Django:使用小部件来限制ModelForm中的选择

use*_*156 4 forms django widget

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

我必须使用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)
    }
Run Code Online (Sandbox Code Playgroud)

dan*_*era 5

来自django模型表单文档:

如果你明确地实例化这样的表单字段,Django假定你想要完全定义它的行为; 因此,不会从相应的模型中绘制默认属性(例如max_length或required).如果要维护模型中指定的行为,则必须在声明表单字段时明确设置相关参数.

您可以尝试:

class SubsytemForm(forms.ModelForm):  
    name =  forms.ChoiceField(widget=RadioSelect, choices= choices )
    class Meta:
        model = Subsystem
Run Code Online (Sandbox Code Playgroud)

你也可以

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  
Run Code Online (Sandbox Code Playgroud)

name_choicesSubsytemForm创建中作为参数发送.请记住,选择应该是一个查询集.

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