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

2024-09-30 16:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Site模型,我正试图创建一个扩展django.forms.ModelMultipleChoiceField的{},它使用我的自定义SiteSelectorWidget和{}作为查询集

如果没有自定义表单字段,我的表单.py代码如下所示(并且有效):

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

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

^{pr2}$

但是当我创建SiteSelectorField类时,Django告诉我“SiteSelectorField'对象没有属性'验证器”

class SiteSelectorField(forms.ModelMultipleChoiceField):

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

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

如何为这个字段指定一个默认的queryset和widget,这样就不需要传递它们了?在


Tags: djangopy模型表单objectssiteformsall
1条回答
网友
1楼 · 发布于 2024-09-30 16:31:38

删除def __init__方法和代码。通过将“pass”放在里面,您就重写了您的类继承的ModelMultipleChoiceField的默认功能,它将利用queryset。在

编辑:

重新构造您的__init__方法,如下所示:

  def __init__(self, *args, **kwargs):
      if not 'queryset' in kwargs:
          kwargs['queryset'] = Site.objects.all()
      return super(SiteSelectorField, self).__init__(*args, **kwargs)

相关问题 更多 >