首页 / GO / Django之ModelForm详解
Django之ModelForm详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Django之ModelForm详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2339字,纯文字阅读大概需要4分钟。
内容图文
ModelForm 是 Django 中编写基于 Model 定制表单的方法,可以提高 Model 复用性。
使用时 Django 会根据 django.db.models.Field
(用于数据库衔接) 自动转化为 django.forms.Field
(用于表单前端展示、后端验证)。
编辑数据:
如果不用ModelForm,编辑的时候得显示之前的数据吧,还得挨个取一遍值,如果ModelForm,只需要加一个instance=obj(obj是要修改的数据库的一条数据的对象)就可以得到同样的效果。
保存的时候要注意,一定要注意有这个对象(instance=obj),否则不知道更新哪一个数据。
代码示例:
from django.shortcuts import render,HttpResponse,redirect from django.forms import ModelForm # Create your views here. from app01 import models def test(request): # model_form = models.Student model_form = models.Student.objects.all() return render(request,‘test.html‘,{‘model_form‘:model_form}) class StudentList(ModelForm): class Meta: model = models.Student #对应的Model中的类 fields = "__all__" #字段,如果是__all__,就是表示列出所有的字段 exclude = None #排除的字段 labels = None #提示信息 help_texts = None #帮助提示信息 widgets = None #自定义插件 error_messages = None #自定义错误信息 #error_messages用法: error_messages = { ‘name‘:{‘required‘:"用户名不能为空",}, ‘age‘:{‘required‘:"年龄不能为空",}, } #widgets用法,比如把输入用户名的input框给为Textarea #首先得导入模块 from django.forms import widgets as wid #因为重名,所以起个别名 widgets = { "name":wid.Textarea } #labels,自定义在前端显示的名字 labels= { "name":"用户名" } def student(request): if request.method == ‘GET‘: student_list = StudentList() return render(request,‘student.html‘,{‘student_list‘:student_list}) else: student_list = StudentList(request.POST) if student_list.is_valid(): student_list.save() return render(request,‘student.html‘,{‘student_list‘:student_list}) def student_edit(request,pk): obj = models.Student.objects.filter(pk=pk).first() if not obj: return redirect(‘test‘) if request.method == "GET": student_list = StudentList(instance=obj) return render(request,‘student_edit.html‘,{‘student_list‘:student_list}) else: student_list = StudentList(request.POST,instance=obj) if student_list.is_valid(): student_list.save() return render(request,‘student_edit.html‘,{‘student_list‘:student_list}) 使用ModelForm编辑数据
对于验证规则,很多浏览器都比较智能,会自动帮我们做一些验证,可以在form表单上加 novalidate 属性就可以不让浏览器为我们做验证
ModelForm还支持所有form的功能,比如钩子,所以我们就可以通过钩子来自定义验证规则
写法和forms的写法一样:
class AuthorForm(forms.ModelForm): class Meta: model = Author fields = (‘name‘, ‘title‘) def clean_name(self): if ... return self.clean_data[‘name‘] else: raise ValidationError(‘sdgsadga’) ...
https://www.cnblogs.com/DI-DIAO/p/8978780.html
原文:https://www.cnblogs.com/Mengchangxin/p/10855774.html
内容总结
以上是互联网集市为您收集整理的Django之ModelForm详解全部内容,希望文章能够帮你解决Django之ModelForm详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。