本文介绍了Django:使用小部件来限制 ModelForm 中的选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

My model form inherit from subsystem form.I want to limit choices for the user in the form. (specially the name)I know I have to use widgets. But It doesn't work.

我必须使用 SubsytemForm.

I have to use 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)
        }

推荐答案

来自 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

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

and send name_choices as parameter in SubsytemForm creation. Remember that choices should be a query set.

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

这篇关于Django:使用小部件来限制 ModelForm 中的选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-22 22:53