python - Django:子类的一个 ModelForm

标签 python django

我有一个像这样的抽象模型:

class BaseAgent(models.Model):
    name = models.CharField('Name', max_length=128, null=False, default='')

    class Meta:
        abstract = True

我正在使用确切的代理类型创建该模型的子类。例如 Agent001、Agent002 等等。

我希望每个子类都只有一个 ModelForm 表单类。我将把它传递给 UpdateView View 。但它需要指定Meta.model

class AgentEditForm(ImprovedForm, forms.ModelForm):

    class Meta:
        model = BaseAgent  # here I would like to have Agent001, Agent002 or others
        exclude = ()

我有一个 ModelForm 的子类,添加了一些 mixin,并且想使用这个类(我们称之为 ImprovedForm)。

理想情况下,我希望在 urls.py 中有一个字符串来调用仅传递模型名称(以及表单)的 View 。

url(r'^agent001/new$', login_required(views.AgentCreateUpdateView.as_view(model=Agent001, form=ImprovedAgentForm)), name='new_agent001'),

当然,我可以为每个模型创建一个表单,如下所示:

class Agent001EditForm(AgentEditForm):

    class Meta:
        model = Agent001

但这只是复制粘贴。想象一下,我有两个以上的类(class),并且将来还会有更多类(class)。我想要一个通用的解决方案。

如何用最少的代码行来完成它?

最佳答案

forms.py

import sys

for model in (Agent001, Agent002):
    form_name = model.__name__ + 'EditForm'

    class AgentEditForm(forms.ModelForm):
        class Meta:
            model = model
            exclude = ()

    AgentEditForm.__name__ = form_name
    setattr(sys.modules[__name__], form_name , AgentEditForm)
    del AgentEditForm

关于python - Django:子类的一个 ModelForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34346154/

相关文章:

python - 将 C 代码转换为 Python 时语法无效

python - 找不到输入到 ReadVariableOp 的变量

Django-Postgres : length of CharField as primary key

python - 为什么 Django 对外键进行级联删除?

django - 自定义用户模型和南

python - 重定向到 django 相对路径

python - Django Tinymce 不显示富文本表单

python - Python 中的正则表达式 : not able to match repeated group numbers

python - Matplotlib 拖放文件

python - 我应该如何使用 python 和 redis 存储简单对象?