Django modelform组件详解与实例应用
63 浏览量
更新于2024-09-07
收藏 183KB PDF 举报
本文将详细介绍Django框架中modelform组件的实例用法,帮助开发者更好地理解和运用这一功能。modelform是Django中一个强大的工具,它基于Django的模型(models)自动创建表单,简化了前端与后端数据交互的过程。
首先,要在Django项目中使用modelform,你需要在`models.py`文件中定义相应的模型类。模型表包含了数据库中的字段和结构,如`User`模型可能包含`username`, `password`, 和 `gender`等字段。
接下来,在`form.py`文件中,导入必要的库并创建`ModelForm`类。这个类继承自`ModelForm`,并通过`class Meta`部分指定要绑定的模型以及需要或排除的字段。例如:
```python
from django import forms
from django.forms import widgets as wd
from app01 import models
class UserForm(ModelForm):
class Meta:
model = models.User
fields = "__all__" # 包含所有字段
exclude = ['gender'] # 隐藏gender字段
widgets = { # 自定义字段的输入组件
'password': wd.PasswordInput(),
}
error_messages = {
NON_FIELD_ERRORS: {'unique_together': 'This field must be unique.'} # 自定义全局错误消息
}
def clean_username(self): # 定义自定义验证钩子
username = self.cleaned_data['username']
if User.objects.filter(username=username).exists():
raise forms.ValidationError('Username already exists.')
return username
```
在实际应用中,modelform主要用于两种场景:数据的新增(添加)和编辑。对于数据添加,通过`form = 类名(data=request.POST)`实例化表单,然后使用`form.save()`方法将用户提交的数据保存到数据库中。如果进行编辑操作,需要在`form.save()`时传递`instance`参数,确保这是要更新的对象,以避免误创建新的记录。
例如,处理GET请求的编辑页面:
```python
def edit(request, pk):
obj = models.User.objects.get(pk=pk)
form = UserForm(instance=obj)
if request.method == 'POST':
form = UserForm(request.POST, instance=obj)
if form.is_valid():
form.save()
return redirect('success_url')
return render(request, 'edit.html', {'form': form})
```
Django的modelform极大地简化了表单开发流程,通过自动映射模型字段生成表单,并提供了自定义选项来控制字段展示、验证和错误提示。掌握并灵活运用modelform,能有效提升开发效率和代码质量。
2021-01-20 上传
2020-09-19 上传
点击了解资源详情
2020-12-16 上传
2020-09-19 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-09-18 上传
weixin_38664556
- 粉丝: 5
- 资源: 958
最新资源
- launch-list:跟踪全球航天器所有即将到来的发射日期时间
- HealthSpeaks
- manager,c#获取网页源码指定元素site:bbs.csdn.net,c#
- VB写的可视化的控件注册程序
- exportToZip:标识M文件的依赖性并创建一个ZIP文件:$ matlabroot / toolbox中的文件被省略,从而提供了一种打包工作的有用方法-matlab开发
- SQLAlchemy:SQLAlchemy作业
- Turn Negative Numbers to Purple-crx插件
- length-of-word-histogranm,c#开发想qq一样的软件源码,c#
- DupMaster:摆脱Mac上的重复文件-开源
- Instagram_test:DRF-示例
- [论坛社区]Phpwind会员电子邮件地址导出程序_phpwind_email.rar
- fdbt-site:票价数据构建工具的主站点
- INL Image Artifacts:CMOS 图像传感器中积分非线性和列 ADC 失配效应的示例和模型-matlab开发
- Project-23
- GUMT - the GNU Users Management Tool-开源
- SilverlightWmv,c#查询系统源码,c#