初始化后,Django在表单集中生成了错误数量的表单

问题描述

我有以下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_numextra后导致

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