问题描述
我有以下Formset声明:
ModelAFormSet = generic_inlineformset_factory(
ModelA,form=AddModelAForm,formset=BaseModelAFormset,min_num=1,extra=0)
和ModelA如下:
class ModelA(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=100)
content_type = models.ForeignKey(ContentType,on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
model_object = GenericForeignKey('content_type','object_id')
当我按照以下方式初始化表单集时:
init_list = []
for my_model in self.edit_parent.my_models.all():
dictionary = {
'name': my_model.name,'description': my_model.description,'id': my_model.id}
init_list.append(dictionary)
formset = ModelAFormSet(initial=init_list)
我总是只生成一条记录。无论len(init_list)是什么。我一直在努力寻找解释,但没有运气。
其他信息
从ModelAFormSet中删除min_num
和extra
后导致
ModelAFormSet = generic_inlineformset_factory(
ModelA,formset=BaseModelAFormset)
生成的表格数量是正确的。我有2种形式,希望分配给他们的是机智数据,(这是不正确的部分)一种额外的空形式。当我完全删除min_num
时,还不会生成任何表格。
解决方法
extra
参数应等于您期望看到的表单数量。除非您要验证表单数量,否则无需设置min_num
。
class MyView(generic.CreateView):
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
init_list = [...]
formset = generic_inlineformset_factory(
...
extra=len(init_list),)
context['formset'] = formset(
self.request.POST or None,initial=init_list,)
return context