Django:子类的一个模型

2024-10-02 22:29:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个抽象模型:

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

    class Meta:
        abstract = True

我正在用精确的代理类型创建这个模型的子类。例如Agent001,Agent002等等。你知道吗

我只希望这些子类中的每一个子类都有一个ModelForm形式的类。我将把它传递给UpdateView视图。但是它需要指定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中有一个字符串来调用只传递了模型名的视图(还有表单)。你知道吗

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

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

class Agent001EditForm(AgentEditForm):

    class Meta:
        model = Agent001

但它只是一个复制粘贴。想象一下,我有两个以上的类,并将有更多的未来。我想要一个通用的解决方案。你知道吗

我如何用最少的代码行来完成它?你知道吗


Tags: name模型视图表单modelmodels子类meta
1条回答
网友
1楼 · 发布于 2024-10-02 22:29:21

表单.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

相关问题 更多 >