Django FormWizard中的空ModelFormset
我在使用Django的FormWizard功能。这个功能本身运行得很好,但我在显示空的模型表单集时遇到了一些问题。
我有一个叫做Domain
的模型。我是这样创建一个模型表单集的:
DomainFormset = modelformset_factory(Domain)
然后我把这个表单集传给FormWizard,像这样:
BuyNowWizardView.as_view([DomainFormset])
我没有遇到任何错误,但当向导渲染页面时,我看到的是所有Domain
对象的列表。我其实想要的是一个空的表单。请问我该怎么做呢?我听说可以给模型表单集提供一个queryset
参数,比如Domain.objects.none()
,但这似乎不奏效,我反而遇到了错误。
有没有人能告诉我我哪里出错了?
谢谢!
1 个回答
6
Django的文档提供了两种方法来更改表单集的查询集。
第一种方法是在创建表单集的时候,把查询集作为参数传进去。如果你使用的是表单向导,可以通过传递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
传递给表单向导。