如何使用字典初始化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')

BaseModelAFormset的定义如下:

class BaseModelAFormset(BaseGenericInlineFormSet):

    def add_fields(self,form,index):
        super(BaseModelAFormset,self).add_fields(form,index)

        form.nested = ModelBFormset(
            instance=form.instance,data=form.data if form.is_bound else None,files=form.files if form.is_bound else None,prefix='%s-%s' % ( 
                form.prefix,ModelBFormset.get_default_prefix()),)

我对ModelBFormset的定义如下:

ModelBFormset = inlineformset_factory(ModelA,ModelB,form=AddModelBForm,extra=1)

ModelB看起来像这样:

class ModelB(models.Model):
    quantity = models.IntegerField()
    value = models.DecimalField(max_digits=7,decimal_places=2)
    model_a = models.ForeignKey(
        ModelA,on_delete=models.CASCADE,related_name='model_as'
    )

我知道我可以通过以下方式初始化ModelAFormSet:

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)

但是我不知道如何在这里ModelBFormset进行初始化。我应该使用任何特殊的字段名称作为初始词典的键吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)