Django - 动态导入模型表单

Han*_*pan 3 django

我想创建一个能够显示各种不同模型的ModelForm的视图.它通过获取模型的内容类型然后动态实例化与该特定模型相关联的模型表单来实现.这是我的模型:

from django.db import models

class SomeModel(models.Model):
    name = models.CharField(max_length=150)

    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

在同一个应用程序中,有一个forms.py,其格式如下:

from django.forms import ModelForm

from someapp.models import SomeModel 

class SomeModelForm(ModelForm):
    class Meta:
        model = SomeModel
        fields = ('name',)
Run Code Online (Sandbox Code Playgroud)

所以我想在我的视图文件中做的是动态地为每个模型返回正确的表单.我尝试了以下方法:

from django.db import models
from someapp.forms import SomeModelForm

    class SomeModel(models.Model):
        name = models.CharField(max_length=150)

        form = SomeModelForm

        def __unicode__(self):
            return self.name
Run Code Online (Sandbox Code Playgroud)

但由于明显的循环导入,它不起作用.有谁知道如何实现这个目标?我尝试使用modelform_factory,但似乎忽略了forms.py中的任何自定义模型形式.

编辑:我应该提到我不会有模型的实例,只有模型类本身,所以有一个模型内部的方法不起作用(但是,如果你调用它,它确实有效)模型的一个实例)

Ala*_*air 6

您可以通过在方法中导入模型表单来绕过循环导入.

class SomeModel(models.Model):
    name = models.CharField(max_length=150)

    @staticmethod
    def get_form_class():
        from someapp.forms import SomeModelForm
        return SomeModelForm

# in your view:
SomeModel.get_form_class()
Run Code Online (Sandbox Code Playgroud)