【问题标题】:django model form inheritancedjango模型表单继承
【发布时间】:2012-09-20 16:26:10
【问题描述】:

我在我的模型表单中使用 django 模型表单继承,但它似乎在这里不起作用是我的代码示例

class ArticleForm(forms.ModelForm):
  title = forms.CharField(required=True)
  sites = forms.ModelMultipleChoiceField(required=True, queryset= Sites.objects.all().order_by('name'), widget=forms.SelectMultiple())

class ArticleAddForm(ArticleForm):
   class Meta(ArticleForm.Meta):
       exclude = ('sites',)

我想从“ArticleAddForm”中排除“站点”,但在验证时会引发表单验证错误站点字段,请帮忙?

【问题讨论】:

  • 那是因为 'sites' 字段有 required=True
  • @pram 但我希望在 ArticleForm 中需要站点字段 = True,还有其他方法可以解决吗?

标签: django django-forms


【解决方案1】:

我相信,ModelForms 不能很好地处理继承。

您可以做的最好的可能是删除子类中的required 标志:

def __init__(self, *args, **kwargs):
    super(ArticleAddForm, self).__init__(*args, **kwargs)
    self.base_fields['sites'].required = False
    self.base_fields['sites'].widget = HiddenInput() # if you want

【讨论】:

    【解决方案2】:

    在您看来,您需要使用 Article 对象初始化 ArticleAddForm 以填充空白字段,即排除字段。例如:

    sites = Sites.objects.all()    # modify this according to your needs
    article = Article(title='', sites=sites)
    form = ArticleAddForm(request.POST, instance=article)
    form.save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2015-09-29
      • 2015-03-05
      相关资源
      最近更新 更多