Django使用实例初始化模型表单集

时间:2020-08-21 09:55:52

标签: django django-forms

我有以下模型:

class ModelA(models.Model):
   name = models.CharField(max_length=100)
   description = models.CharField(max_length=100)

它在modelformset中使用:

ModelAFormSet = generic_inlineformset_factory(
    ModelA,
    form=AddModelAForm, extra=2)

AddModelAForm如下所示:

class AddModelAForm(forms.ModelForm):
    selected = forms.BooleanField(required=False)

    class Meta:
        model = ModelA
        fields = ['id']

,然后按照以下方式初始化:

formset = ModelAFormSet(
                queryset = ModelA.objects.none(), initial=[{'id':16, 'selected': True}, {'id': 32, 'selected': False}])

我想在模板实例中使用,而不是实际的模型字段。像这样:

{{formset_form.id}}
{% with formset_form.instance as modelA %}
Name: {{modelA.name}}
Description: {{modelA.description}}
{{formset_form.selected}}
{% endwith %}

正在使用ModelAFormSet的此类实例:

formset = ModelAFormSet(queryset=ModelA.objects.all())

我知道我可以使用Meta的更改AddModelAForm类来拥有fields = ['id', 'name', description'],然后初始化这些值。但是在这种情况下,我将无法再使用实例,而只能使用常规字段值(例如{{formset_form.name.value}})。因此,我需要在我的表单的clean()方法中添加如下内容:

def clean(self):
   try:
      del self.errors['name']
      del self.errors['description']
   except KeyError:
      pass

我想问一下是否有更好的方法可以初始化这种表单集,并且不需要显式删除错误?

0 个答案:

没有答案