Django';s forms.Form vs forms.ModelForm

Django';s forms.Form vs forms.ModelForm,django,django-forms,Django,Django Forms,有谁能给我解释一下Django的表单.Form&表单.ModelForm?相似之处在于,它们都使用小部件生成表单输入集,并且都验证浏览器发送的数据。不同之处在于ModelForm从指定的模型类获取其字段定义,并且还具有处理将基础模型保存到数据库的方法。从表单创建的表单。表单由您手动配置。对于不直接与模型交互的表单,最好使用这些。例如,联系人表单或时事通讯订阅表单,您可能不一定要与数据库交互 其中,作为从forms.ModelForm创建的表单,将自动创建,然后您可以稍后进行调整。最好的例子来自D

有谁能给我解释一下Django的
表单.Form
&
表单.ModelForm

相似之处在于,它们都使用小部件生成表单输入集,并且都验证浏览器发送的数据。不同之处在于ModelForm从指定的模型类获取其字段定义,并且还具有处理将基础模型保存到数据库的方法。

表单创建的表单。表单由您手动配置。对于不直接与模型交互的表单,最好使用这些。例如,联系人表单或时事通讯订阅表单,您可能不一定要与数据库交互

其中,作为从
forms.ModelForm
创建的表单,将自动创建,然后您可以稍后进行调整。最好的例子来自Django网站上提供的优秀文档

表单。表单

文档:
使用
表单创建的标准表单示例。表单

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)
from django.forms import ModelForm
from . import models

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

文档:
直接从文档中:

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

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

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)
from django.forms import ModelForm
from . import models

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

此表单自动具有与创建它所依据的
文章
模型相同的所有字段类型。

以下是我扩展内置UserCreationForm myapp/forms.py的方法:


区别很简单,ModelForm用于创建模型的形式。 这意味着该模型旨在创建表的某种模式,您将在其中保存来自表单提交的数据,ModelForm仅创建模型的一种形式(来自表的模式)

表单是与数据库(模型)无关的常见表单。

# A simple form to display Subject and Message field
class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)
换句话说,, 如果你的应用程序中有一个模型,并且你想创建一个表单在该模型中输入数据(并通过它输入数据库),请使用forms.ModelForm

如果您想使用django创建一个表单,请使用form.form

但您也可以将其结合使用:

from django import forms
# A simple form to display Subject and Message field
class ContactForm(forms.ModelForm):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)
class Meta:
        model = Contact #when you have this model
        fields = [
            'subject',
            'message',
            
        ]

谢谢请问:我可以在不在管理区的普通视图上渲染ModelForm吗?当您传递request.POST以初始化表单时,可以在普通视图中呈现和处理表单。这就是它们的预期用途。管理表单是一个完全不同的野兽,超出了这个问题的范围。习惯于参考官方文件。它非常棒,几乎每次都能帮你省钱。