首页 文章

Django默认查询集和ModelForm自定义字段的小部件

提问于
浏览
0

我有一个 Site 模型,我正在尝试创建一个扩展 django.forms.ModelMultipleChoiceFieldSiteSelectorField ,它使用我的自定义 SiteSelectorWidgetSite.objects.all() 作为查询集

没有自定义表单字段,我的forms.py代码看起来像这样(并且有效):

sites = forms.ModelMultipleChoiceField(queryset=Site.objects.all(), widget=SiteSelectorWidget())

我想限制传递的参数,所以我可以这样做

sites = SiteSelectorField()

但是当我创建SiteSelectorField类时,如下所示,Django告诉我“SiteSelectorField”对象没有属性'validators'

class SiteSelectorField(forms.ModelMultipleChoiceField):

  queryset = Site.objects.all()
  widget = SiteSelectorWidget()

  def __init__(self, *args, **kwargs):
    pass

如何为此字段指定默认查询集和窗口小部件,以便不需要传递它们?

1 回答

  • 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)
    

相关问题