【问题标题】:modelformset_factory: display more fields for specific instancesmodelformset_factory:显示特定实例的更多字段
【发布时间】:2015-05-07 16:56:29
【问题描述】:

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

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

效果很好。

但现在我需要在表单中显示Product 模型的附加字段,但仅针对Product 的特定实例。我不确定它是否可以在 Django 中以简单的方式完成。是否可以使用modelformset_factory 这样做?

【问题讨论】:

  • 我现在没有时间写下完整的详细信息作为答案,更不用说测试以确保我是正确的,但我认为这应该可以通过更改表单的 @987654326 __init__ 方法中的 @ 属性,用于表单(不是表单集)类。该实例(如果有)将是__init__instance 关键字参数。
  • 是的,您需要定义一个新的ModelForm(类似于ProductForm)并覆盖__init__ 以动态更改表单。

标签: django django-forms


【解决方案1】:

您可以在 modelformset_factory 中指定表单,因此创建一个模型表单(如果有,请在 forms.py 中)覆盖 __init__ 方法以添加额外的字段。 我会将字段从 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 参数将其传递给您的模型表单集工厂

ProductFormSet = modelformset_factory(Product,  form=ProductForm )
form_products = ProductFormSet()

【讨论】:

  • 我之前没见过form=myModelForm属性,这是完美
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 2020-08-01
  • 1970-01-01
  • 2015-01-23
相关资源
最近更新 更多