DJANGO-如何为由于contentType实例而事先未知的模型生成表单
我有以下模型及其形式:DJANGO-如何为由于contentType实例而事先未知的模型生成表单,django,forms,django-forms,contenttype,Django,Forms,Django Forms,Contenttype,我有以下模型及其形式: class Project(models.Model) class ProjectForm(forms.ModelForm) class Meta: Model = Project 因此,通过实例化以下内容可以轻松创建表单: form = ProjectForm() 但在我的例子中,除了“项目”之外,我还有几个模型,我事先不知道我需要为这些模型中的哪一个创建表单 因此,我想从项目模型的ContentType实例创建表单 换句话说,我要找的东西
class Project(models.Model)
class ProjectForm(forms.ModelForm)
class Meta:
Model = Project
因此,通过实例化以下内容可以轻松创建表单:
form = ProjectForm()
但在我的例子中,除了“项目”之外,我还有几个模型,我事先不知道我需要为这些模型中的哪一个创建表单
因此,我想从项目模型的ContentType实例创建表单
换句话说,我要找的东西看起来像:
myproject = Project()
form = createform(myproject.ContentType)
不幸的是,这是我所能找到的最好的方法——但是和的结合应该可以达到目的。您需要使用
get\u model
加载要处理的模型类型,然后使用form\u for\u model
获取该模型的表单
编辑:如果你知道你在处理什么模型,丹尼尔的解决方案会好得多。不幸的是,这是我能找到的最好的解决方案,但是和的组合应该可以解决这个问题。您需要使用
get\u model
加载要处理的模型类型,然后使用form\u for\u model
获取该模型的表单
编辑:如果你知道你在处理什么模型,Daniel的解决方案会好得多。大概你可以使用有限的模型选择。最简单的方法就是为每个表单创建表单类,然后从字典中选择所需的表单类:
MODEL_FORMS = {
MyModel: MyModelForm,
MyOtherModel: MyOtherModelForm
}
my_form_class = MODEL_FORMS[my_project.content_type]
my_form = my_form_class()
大概您可以使用有限的模型选择。最简单的方法就是为每个表单创建表单类,然后从字典中选择所需的表单类:
MODEL_FORMS = {
MyModel: MyModelForm,
MyOtherModel: MyOtherModelForm
}
my_form_class = MODEL_FORMS[my_project.content_type]
my_form = my_form_class()
谢谢你们两位,这很有帮助 我将使用Daniel的解决方案,因为我的模型数量有限 我想也许我需要将model_class()添加到“my_project.content_type.model_class()”中,以获取模型类(要检查) 为了记录在案,我设法使模型模板集工厂的某些功能正常工作:
from django.forms.models import modelformset_factory
ProjectFormSet = modelformset_factory(my_project.content_type.model_class())
my_form = ProjectFormSet()
但是这个表单当然不会得到我模型表单中的所有定制。。。所以这不是一个好的解决方案。谢谢你们两位,这非常有帮助 我将使用Daniel的解决方案,因为我的模型数量有限 我想也许我需要将model_class()添加到“my_project.content_type.model_class()”中,以获取模型类(要检查) 为了记录在案,我设法使模型模板集工厂的某些功能正常工作:
from django.forms.models import modelformset_factory
ProjectFormSet = modelformset_factory(my_project.content_type.model_class())
my_form = ProjectFormSet()
但是这个表单当然不会得到我模型表单中的所有定制。。。所以这不是一个好的解决方案。奇怪的是,Django没有提供从模型获取模型表单的方法?难道我们没有通过:class Meta:model=projecto获得信息吗?Django没有提供从模型获取模型表单的方法,这很奇怪?我们不是通过:class Meta:model=Project获得了信息吗