加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django – 动态导入模型表单

发布时间:2020-12-20 12:19:32 所属栏目:Python 来源:网络整理
导读:我想创建一个能够显示各种不同模型的ModelForm的视图.它通过获取模型的内容类型然后动态实例化与该特定模型相关联的模型表单来实现.这是我的模型: from django.db import modelsclass SomeModel(models.Model): name = models.CharField(max_length=150) de
我想创建一个能够显示各种不同模型的ModelForm的视图.它通过获取模型的内容类型然后动态实例化与该特定模型相关联的模型表单来实现.这是我的模型:

from django.db import models

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

    def __unicode__(self):
        return self.name

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

from django.forms import ModelForm

from someapp.models import SomeModel 

class SomeModelForm(ModelForm):
    class Meta:
        model = SomeModel
        fields = ('name',)

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

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

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

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

解决方法

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

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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读