Django内联表单集错误

Posted

技术标签:

【中文标题】Django内联表单集错误【英文标题】:Django inline formset error 【发布时间】:2012-06-27 06:11:02 【问题描述】:

我正在尝试将内联表单集添加到表单中。这是重现错误的最少代码:

models.py

class Festival(Model):
    desc = TextField(max_length=1000)

class FestivalAddress(Model):
    festival = ForeignKey(Festival, related_name="addresses")
    name = CharField(max_length="50")

urls.py

urlpatterns = patterns('',
    url('^add/$', FestivalCreateView.as_view(), name='festival_add'), 
)

views.py

class FestivalCreateView(CreateView):
    model = Festival
    form_class = FestivalForm

    #Add FestivalAddressFormset to context here

forms.py

class FestivalAddressForm(ModelForm):
    class Meta:
        model = FestivalAddress

class FestivalForm(ModelForm):
    class Meta:
        model = Festival

FestivalAddressFormSet = inlineformset_factory(FestivalForm, FestivalAddress, form=FestivalAddressForm, extra=2)

这会引发 AttributeError:'ModelFormOptions' 对象没有属性 'get_parent_list'。我有点难过,因为我正在遵循here on SO 给出的解决方案。

编辑:我删除了 FestivalCreateView 对表单集的使用,因为不管有没有它都会发生错误。

【问题讨论】:

这些信息不足以解决问题。 FestivalCreateView 甚至不使用您的表单集?您需要更新示例以显示表单集的使用方式,并发布完整的堆栈跟踪。 Greg - FestivalCreateView 正在使用表单集。我意识到该问题与该用法无关,因此我删除了该代码以使代码更清晰。 好的,那么您应该删除对 Formset 的所有引用,因为它不再在您的代码中使用... 【参考方案1】:

看来我对 inlineformset_factory 的调用不正确。根据the docs,第一个参数应该是模型,而不是表单。

【讨论】:

【参考方案2】:

应该是: FestivalAddressFormSet = inlineformset_factory(Festival, FestivalAddress, form=FestivalAddressForm, extra=2)

【讨论】:

获得类似工作的好例子haineault.com/blog/155

以上是关于Django内联表单集错误的主要内容,如果未能解决你的问题,请参考以下文章

单元测试 django 内联表单集

Django:正确显示表单集错误

用户同时编辑时,Django 内联表单集抛出 IndexError

如何检测表单集在模板中是不是有任何错误?

Django:如何显示内联表单集中每个模型对象的表单错误

使用内联表单在 django-crispy-forms 中呈现字段错误