gpt4 book ai didi

django - 如何将模型从 CBV 传递到 ModelForm

转载 作者:行者123 更新时间:2023-12-04 10:47:06 26 4
gpt4 key购买 nike

我有一个 view我想与自定义 form_class 一起使用:

class CustomCreateView(CreateView):
form_class = CustomCreateForm
fields = ['field1', 'field2']

我想重复使用这个 View ,以便我可以将它用于不同的模型,例如:
class CreateBook(CustomCreateView)
model = Books

class CreateCar(CustomCreateView)
model = Cars

因为要复用,所以需要通过 model的方法来自 CreateView到表单类。我无法在表单类中指定它,因为这样我就无法在不同模型之间重用 View 。

有没有办法做到这一点?例如。
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

在 View 中
class YourView(CustomCreateView)
model = Cars

def get_form_class(self):
return form_class_factory(self.model)

关于django - 如何将模型从 CBV 传递到 ModelForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59651756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com