我有一个view
要与自定义一起使用的form_class
:
class CustomCreateView(CreateView):
form_class = CustomCreateForm
fields = ['field1', 'field2']
我想重复使用此视图,以便可以将其用于不同的模型,例如:
class CreateBook(CustomCreateView)
model = Books
class CreateCar(CustomCreateView)
model = Cars
因为我想重用它,所以我需要一种将传递model
从CreateView
到表单类的方法。我无法在表单类中指定它,因为那样我就无法在不同模型之间重用该视图。
有没有办法做到这一点?例如
class CustomCreateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
model = kwargs.pop('model')
self._meta.model = model
super(CustomCreateForm, self).__init__(*args, **kwargs)
class Meta:
fields = '__all__'
您可以创建一个表单类工厂,将模型传递给它,然后创建动态表单类。覆盖get_form_class
视图中的方法,并像这样调用表单工厂
def form_class_factory(model_class):
class CustomCreateForm(forms.ModelForm):
class Meta:
model = model_class
fields = '__all__'
return CustomCreateForm
视野中
class YourView(CustomCreateView)
model = Cars
def get_form_class(self):
return form_class_factory(self.model)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句