Django的FormWizard中的空的ModelFormset [英] Empty ModelFormset in Django's FormWizard

查看:137
本文介绍了Django的FormWizard中的空的ModelFormset的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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

  DomainFormset = modelformset_factory(Domain)

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

  BuyNowWizardView.as_view([DomainFormset])

我没有收到任何错误,但是当向导渲染该页面,我得到所有对象的列表。我想要一个空的表格。我该怎么办?我已经读过,我可以给一个 queryset 参数到ModelFormset像 Domain.objects.none()但它在我收到错误的时候似乎不起作用。



任何关于我出错的想法?​​



感谢

解决方案

Django文档提供了两种方式来更改表单集的查询集



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

 #设置formset的步骤'0'的查询器
instance_dict = {'0':Domain.objects.none()}

#在你的url模式
url(r'^ $',BuyNowWizardView.as_view([UserFormSet],instance_dict = instance_dict)),

第二种方法是将 BaseModelFormSet 子类化,并覆盖 __ init __ 方法以使用空查询器。



$ $ $ $ $ $ $ $ $ $ $


ase $ * args,** kwargs):
super(BaseDomainFormSet,self).__ init __(* args,** kwargs)
self.queryset = Domain.objects.none()

DomainFormSet = model formset_factory(Domain,formset = BaseDomainFormSet)

然后通过 DomainFormSet 到以前的表单向导。


I'm using Django's FormWizard. It works fine but I'm having trouble getting any empty model formset to display correctly.

I have a model called Domain. I'm creating a ModelFormset like this:

DomainFormset = modelformset_factory(Domain)

I pass this to the FormWizard like this:

BuyNowWizardView.as_view([DomainFormset])

I don't get any errors but when the wizard renders the page, I get a list of all Domain objects. I'd like to get an empty form. How I can do this? I've read that I can give a queryset parameter to the ModelFormset like Domain.objects.none() but it doesn't seem to work as I get errors.

Any ideas on where I'm going wrong?

Thanks

解决方案

The Django docs give two ways to change the queryset for a formset.

The first way is to pass the queryset as an argument when instantiating the formset. With the formwizard, you can do this by passing 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)),

The second approach is to subclass BaseModelFormSet and override the __init__ method to use the empty queryset.

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)

You then pass DomainFormSet to the form wizard as before.

这篇关于Django的FormWizard中的空的ModelFormset的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆