编辑
2024-04-24
Python
00

目录

区别对比
示例
1. Form 示例
2. ModelForm 示例
总结

Django 中的 Form 和 ModelForm 都用于处理表单,但它们有显著的区别。下面通过表格以及示例进行说明。

区别对比

特性FormModelForm
定义方式手动定义所有字段。自动生成字段,基于与模型(Model)的对应关系。
字段与模型的关联不与数据库模型(Model)相关。直接与数据库模型相关,字段映射到模型的字段。
使用场景自定义表单,不需要与数据库模型交互的场景。当需要基于数据库模型创建或更新记录时使用。
表单验证需要手动定义字段验证规则。自动继承模型中的字段验证规则,可以自定义额外规则。
表单保存需要手动编写保存逻辑。提供 save() 方法,直接保存到数据库。
代码量需要手动定义字段、验证和保存逻辑,代码量较多。自动生成字段,代码量较少,尤其在处理复杂模型时。

示例

1. Form 示例

Form 通常用于不需要直接与模型交互的场景,比如用户反馈表单。

python
from django import forms class ContactForm(forms.Form): name = forms.CharField(max_length=100) email = forms.EmailField() message = forms.CharField(widget=forms.Textarea) # 自定义验证规则 def clean_name(self): name = self.cleaned_data.get('name') if 'spam' in name: raise forms.ValidationError('Invalid name') return name

2. ModelForm 示例

ModelForm 用于基于模型生成表单,比如用户注册表单。

python
from django import forms from .models import UserProfile class UserProfileForm(forms.ModelForm): class Meta: model = UserProfile # 绑定的模型 fields = ['username', 'email', 'bio'] # 自动生成这些字段 # 可以自定义字段验证 def clean_email(self): email = self.cleaned_data.get('email') if not email.endswith('@example.com'): raise forms.ValidationError('Please use a valid example.com email') return email

总结

  • Form 用于手动定义表单,适用于任何需要自定义表单的场景。
  • ModelForm 自动生成表单,适合需要与数据库模型交互的场景。
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:GYC

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!