modelformset_factory:显示特定实例的更多字段

时间:2015-05-07 16:56:29

标签: django django-forms

我使用modelformset_factory以相同的形式编辑Product的多个实例:

ProductFormSet = modelformset_factory(Product, fields=('code', 'state'))
form_products = ProductFormSet()

效果很好。

但现在我需要在表单中显示Product模型的其他字段,但仅适用于Product的特定实例。我不确定它是否可以在Django中以简单的方式完成。是否可以使用modelformset_factory

这样做

1 个答案:

答案 0 :(得分:3)

您可以在modelformset_factory中指定表单,因此创建一个模型表单(如果有的话,在forms.py中)覆盖__init__method以添加额外的字段。 我会将formsetfactory参数中的字段移动到表单

forms.py中的

(假设你有一个)

class ProductForm(forms.ModelForm):

    model = Product

    def __init__(self, *args, **kwargs):
        super(ProductForm, self).__init__(*args, **kwargs)


        if 'instance' in kwargs  :
            product = kwargs['instance']

        # to add an extra field, add something like this 
        self.fields['extra_field']  = forms.CharField(max_length=30)

    class Meta:
        fields = ('code', 'state')

然后使用form参数

将其传递给modelformset工厂
ProductFormSet = modelformset_factory(Product,  form=ProductForm )
form_products = ProductFormSet()