同样是一个相当通用的任务,表单似乎很棘手。我正在尝试将一堆自定义表单放在一起,使用不同的args构造相同表单类的所有不同实例,给定模型中的每个条目一个。
例如,此自定义表单允许用户勾选一个复选框(如果他们已经到达目的地),并选择他们在那里完成的(多个)活动:
class VisitorDestinationForm(Form):
def __init__(self, visitor, destination, *args, **kwargs):
super(VisitorForm, self).__init__(*args, **kwargs)
visitorDestinations = visitor.destinations.all()
self.fields[destination.destination] = forms.BooleanField()
self.fields[destination.destination].initial = destination in visitorDestinations
我想在Destination
查询集中为每个目标创建一个包含其中一种表单的formset。 (我可以使用咖喱处理visitor
arg,如建议here)
此question的已接受答案意味着modelformset_factory
可以采用简单的(自定义)表单和(不相关的)查询集。
但是,如果我尝试,我会收到错误:我无法使用modelformset_factory
,因为VisitorDestinationForm
不是模型的模型,我得到了我的查询集(虽然它们是相关的,但它们应该在构造函数中获取模型实例)。如果我查看代码(django 1.3)
看起来django只处理3个案例:
但是,如果要将从对象列表初始化的自定义表单列表放在一起,似乎没有任何内容。我对此感到惊讶,我认为这将是一个非常普遍的情况
我是否必须通过覆盖_construct_forms
中的BaseFormSet
方法来编写自己的自定义formset_factory?或者我应该在我的视图中单独处理一堆表单,在这种情况下是否需要注意(我听说验证可能很棘手)?
答案 0 :(得分:0)
最后,只要您记得为每个表单传入不同的前缀,就可以通过在单个视图中处理独立表单列表来轻松完成此操作。
您可以在我之前发布的另一个密切相关的question
的答案中看到详细信息