Python / Django - 为模型生成表单。

时间:2017-01-29 10:03:19

标签: python django forms models

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

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。

2 个答案:

答案 0 :(得分:3)

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'])

答案 1 :(得分:1)

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/