Django的forms.Form与forms.ModelForm


Answers:


123

forms.Form由您创建的表单是由您手动配置的。您最好将它们用于不直接与模型交互的表单。例如,联系表格或新闻通讯订阅表格,您可能不一定要与数据库进行交互。

从何处创建的表单forms.ModelForm将自动创建,然后您可以对其进行调整。最好的例子确实来自Django网站上提供的精湛文档。

forms.Form
文档:表单对象
使用forms.Form以下命令创建的普通表单的示例:

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

forms.ModelForm
文档:从模型创建表单
直接从文档开始:

如果您的表单将用于直接添加或编辑Django模型,则可以使用ModelForm来避免重复模型描述。

使用创建的模型表单的示例forms.Modelform

from django.forms import ModelForm
from . import models

# Create the form class.
class ArticleForm(ModelForm):
    class Meta:
        model = models.Article

此表单自动具有Article与其创建时所用模型相同的所有字段类型。


谢谢!我可以问:我可以在不在管理区域中的普通视图上渲染ModelForm吗?传递request.POST进行初始化时,可以在普通视图中呈现和处理表单。
越南

1
是的 那就是他们的预期用途。管理表单是完全不同的野兽,不在此问题的范围内。习惯参考官方文档。它很棒,几乎可以每次都为您节省。
jathanism'2


8

这是我扩展内置UserCreationForm myapp / forms.py的方法

from django import forms
from django.contrib.auth.forms import UserCreationForm


class RegisterForm(UserCreationForm):

    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)
    email = forms.CharField(max_length=75)

    class Meta(UserCreationForm.Meta):
        fields = ('username','first_name','last_name', 'email')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.