在Django的FormWizard中的空ModelFormset

Mri*_*lla 4 python django django-forms django-formwizard

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

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

DomainFormset = modelformset_factory(Domain)
Run Code Online (Sandbox Code Playgroud)

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

BuyNowWizardView.as_view([DomainFormset])
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Ala*_*air 5

Django文档提供了两种方法来更改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)),
Run Code Online (Sandbox Code Playgroud)

第二种方法是子类化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)
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,它显示数据库中的所有现有域.我为每个`Domain`记录得到一个表单,其中包含值. (2认同)