编辑
2024-04-24
Python
00

目录

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

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

区别对比

特性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 许可协议。转载请注明出处!