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。我应该将任何特殊的字段名称作为初始字典的键吗?
| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |