在Django的FormWizard中的空ModelFormset

时间:2011-11-29 18:54:30

标签: python django django-forms django-formwizard

我正在使用Django的FormWizard。它工作正常,但我无法正确显示任何空模型formset。

我有一个名为Domain的模型。我正在创建一个像这样的ModelFormset:

DomainFormset = modelformset_factory(Domain)

我将此传递给FormWizard,如下所示:

BuyNowWizardView.as_view([DomainFormset])

我没有收到任何错误,但是当向导呈现页面时,我得到了所有Domain个对象的列表。我想得到一个空的表格。我怎么能这样做?我已经读过,我可以像queryset一样向ModelFormset提供Domain.objects.none()参数,但它似乎不起作用,因为我收到错误。

关于我哪里出错的任何想法?

由于

1 个答案:

答案 0 :(得分:5)

Django文档为change the queryset for a formset提供了两种方法。

第一种方法是在实例化formset时将queryset作为参数传递。使用formwizard,您可以通过传递instance_dict

来完成此操作
# set the queryset for step '0' of the formset
instance_dict = {'0': Domain.objects.none()}

# in your url patterns
url(r'^$', BuyNowWizardView.as_view([UserFormSet], instance_dict=instance_dict)),

第二种方法是子类BaseModelFormSet并覆盖__init__方法以使用空查询集。

from django.forms.models import BaseModelFormSet

class BaseDomainFormSet(BaseModelFormSet):
    def __init__(self, *args, **kwargs):
        super(BaseDomainFormSet, self).__init__(*args, **kwargs)
        self.queryset = Domain.objects.none()

DomainFormSet = modelformset_factory(Domain, formset=BaseDomainFormSet)

然后像以前一样将DomainFormSet传递给表单向导。