Django 的 FormWizard 中的空 ModelFormset
Posted
技术标签:
【中文标题】Django 的 FormWizard 中的空 ModelFormset【英文标题】:Empty ModelFormset in Django's FormWizard 【发布时间】:2012-01-09 02:39:07 【问题描述】:我正在使用 Django 的 FormWizard。它工作正常,但我无法正确显示任何空模型表单集。
我有一个名为Domain
的模型。我正在创建这样的 ModelFormset:
DomainFormset = modelformset_factory(Domain)
我像这样将它传递给 FormWizard:
BuyNowWizardView.as_view([DomainFormset])
我没有收到任何错误,但是当向导呈现页面时,我得到了所有 Domain
对象的列表。我想要一个空的表格。我怎么能做到这一点?我已经读到我可以为 ModelFormset 提供一个 queryset
参数,例如 Domain.objects.none()
,但由于出现错误,它似乎不起作用。
关于我哪里出错了有什么想法吗?
谢谢
【问题讨论】:
设置查询集时遇到什么错误? 【参考方案1】:Django 文档为change the queryset for a formset 提供了两种方法。
第一种方法是在实例化表单集时将查询集作为参数传递。使用表单向导,您可以通过传递 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
传递给表单向导。
【讨论】:
嘿 Alasdair,我已经尝试了你提到的方法,但我仍然得到填写数据的表单字段。我想知道这是否是一个错误。与常规表单向导的唯一区别是我使用的是 Django 1.4 中较新的向导,该向导已向后移植到 DJango 1.3 github.com/stephrdev/django-formwizard 你说的填写是什么意思?它是显示数据库中的现有域,还是仅使用initial
数据预先填写表单?
是的,它正在显示数据库中的所有现有域。我为每个 Domain
记录获得一个表格,其中包含值。
嗯。我做了一个测试项目(Django trunk,1.4 pre-alpha),子类化方法也不适用于我。我已经用instance_dict
方法更新了我的答案,这确实对我有用。以上是关于Django 的 FormWizard 中的空 ModelFormset的主要内容,如果未能解决你的问题,请参考以下文章