【问题标题】:Python/Django - Generating forms for models.Python/Django - 为模型生成表单。
【发布时间】:2017-06-14 15:37:28
【问题描述】:

我有两个关于模型和表单的问题。

1) 为模型自动创建表单的最佳方式是什么?

在下面的示例中,我有两个模型 - ModelA 和 ModelB。我需要他们的表格 - ModelAForm 和 ModelBForm。它们应该被自动定义。我不想手动做,因为将来我会添加其他模型,所有表格看起来都一样。我正在考虑为模型创建特殊的装饰器并使用 modelform_factory。

from django.db import models
from django.forms import ModelForm

class ModelA(models.Model):
    ...

class ModelB(models.Model):
    ...

class ModelAForm(ModelForm):
    class Meta:
       abstract = ModelA

class ModelBForm(ModelForm):
    class Meta:
        abstract = ModelB

2) 假设我只使用 ModelForm 表单,是否可以找到模型的表单?例子。我有两个模型 ModelA 和 ModelB,以及两个表格 ModelAForm 和 ModelBForm。我有 ModelA 的实例,我想为这个模型确定正确的形式,我将把它传递给模板 - 在这种情况下是 ModelAForm。

【问题讨论】:

标签: python django forms models


【解决方案1】:

Django 提供了一些generic editing views。您只需要提供一个模型,视图就会自动生成表单。如果您想使用表单来创建或更新实例,您可以使用它们。

如果您确实需要自己创建表单,您可以使用modelform_factory,这些视图使用它们自己为您的模型创建正确的表单。但我会首先使用通用视图,只要它们可以修改以满足您的需求。

只需将您的模型和您想要的字段(可选)传递给它。如果省略字段,将生成所有字段:

from .models import MyModel
from django.forms.models import modelform_factory

my_form = modelform_factory(MyModel, fields=['name', 'age', 'job'])

【讨论】:

    【解决方案2】:

    django 中有 ModelForm。 这是文档的片段和链接。 https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/

    class ArticleForm(ModelForm):
        class Meta:
            model = Article
            fields = ['pub_date', 'headline', 'content', 'reporter']
    

    您可能正在寻找基于类的通用视图,其中您只传递 form_classmodel 实例,其他所有 django 都无需您的帮助即可处理。 他们的链接 - https://docs.djangoproject.com/en/1.10/ref/class-based-views/

    【讨论】:

    • 我知道有一个 ModelForm。但是基于您的示例,我想在 Article 的基础上自动生成 ArticleForm。
    • 最多可以指定fields = '__all__'为所有模型字段自动生成表单字段。但更重要的是,仅使用 django 是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2018-12-05
    • 2018-01-21
    • 2015-06-13
    • 2012-03-25
    • 2018-08-15
    • 2013-04-30
    相关资源
    最近更新 更多