如何使用字典初始化 Django 嵌套内联表单集

seb*_*123 5 django django-forms

我有以下内联 Formset 声明:

ModelAFormSet = generic_inlineformset_factory(
    ModelA,
    form=AddModelAForm,
    formset=BaseModelAFormset,
    min_num=1,
    extra=0)
Run Code Online (Sandbox Code Playgroud)

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')
Run Code Online (Sandbox Code Playgroud)

并按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()),
        )
Run Code Online (Sandbox Code Playgroud)

ModelBFormset定义如下:

ModelBFormset = inlineformset_factory(ModelA,
                                      ModelB,
                                      form=AddModelBForm,
                                      extra=1)
Run Code Online (Sandbox Code Playgroud)

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'
    )
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过以下方式初始化 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)
Run Code Online (Sandbox Code Playgroud)

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