我有Site
模型,我正在尝试创建一个SiteSelectorField
扩展django.forms.ModelMultipleChoiceField
,使用我的自定义SiteSelectorWidget
和Site.objects.all()
作为查询集
如果没有自定义表单字段,我的forms.py代码就像这样(并且有效):
sites = forms.ModelMultipleChoiceField(queryset=Site.objects.all(), widget=SiteSelectorWidget())
我想限制传递的参数,所以我可以这样做
sites = SiteSelectorField()
但是当我创建SiteSelectorField类时,如下所示,Django告诉我“SiteSelectorField”对象没有属性'验证器'
class SiteSelectorField(forms.ModelMultipleChoiceField):
queryset = Site.objects.all()
widget = SiteSelectorWidget()
def __init__(self, *args, **kwargs):
pass
如何为此字段指定默认查询集和窗口小部件,以便不需要传递它们?
答案 0 :(得分:1)
删除def __init__
方法和代码。通过在其中放置“pass”,您将覆盖您的类继承的ModelMultipleChoiceField
的默认功能,该功能将使用查询集。
编辑:
重新构建__init__
方法,如下所示:
def __init__(self, *args, **kwargs):
if not 'queryset' in kwargs:
kwargs['queryset'] = Site.objects.all()
return super(SiteSelectorField, self).__init__(*args, **kwargs)