我正在尝试制定一个具有不同职责的时间表。我想命令参与者轮换,例如:
我打算将每个责任订单保存在不同的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)
答案 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)