Django:将ModelForm与不同的模型重复使用

时间:2019-06-29 19:44:24

标签: django django-forms

我正在尝试制定一个具有不同职责的时间表。我想命令参与者轮换,例如:

  1. 参加者12
  2. 参与者4
  3. 等...

我打算将每个责任订单保存在不同的model中。由于我的ModelForm对于每个职责都是相同的,因此可以实例化model时更改正在使用的form吗?

class ReusableModelForm(ModelForm):

    class Meta:
        model = desired_model


# Call it like this
ReusableModelForm(data, desired_model=MyModel_1)

ReusableModelForm(data, desired_model=MyModel_2)

1 个答案:

答案 0 :(得分:1)

Django alreaady具有以下功能:modelform_factory(..) [Django-doc]。例如,此功能用于在CreateView中创建表单。

因此,您可以使用以下方法构造表单类:

from django.forms import modelform_factory

MyModel_1Form = modelform_factory(MyModel_1, fields='__all__')

例如,您可以使用以下子类:

class MyModel_1Form(modelform_factory(MyModel_1, fields='__all__')):
    class Meta:
        labels = {
            'some_field': 'some_label',
        }

然后,您随后可以使用MyModel_1Form()构造一个表单实例。 MyModel_1Form继承自ModelForm [Django-doc]

我们可以使用它来构建 ad hoc 表单,例如将数据传递给它,例如:

def modelform_init(model, *args, fields='__all__', **kwargs):
    return modelform_factory(model, fields=fields)(*args, **kwargs)

然后,如果您不想自定义,我们可以使用以下方法构造一个ModelForm 实例

modelform_init(MyModel_1, request.POST)