Django FormWizard中的空ModelFormset

5 投票
1 回答
1517 浏览
提问于 2025-04-17 07:20

我在使用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传递给表单向导。

撰写回答