modelform:models+form
 
建议尽量用Djangoform,更灵活,但也有人用modelform,写起来很简单
缺点,在models里面,表模型必须有__str__()方法
可添加钩子,用法一样
 
 

实例:

注释部分根据需求选择添加,其他为必须有的。
class UserModelForm(ModelForm):

    class Meta:
model = models.UserInfo
fields = "__all__"
# fields = ['username','nickname',]
# exclude = ['username',]
# error_messages = {
# "username": {'required':'用户名不能为空'}
# }
# widgets = {
# "username":wid.Textarea(attrs={'class':'c1'})
# }
# labels = {
# 'username':'用户名'
# }
# help_texts = {
# 'username': '别瞎写,瞎写打你哦'
# }
#
# field_classes = {
# 'username': fld.EmailField
# } # 钩子
# def clean_email(self):
# pass
#
# def clean_nickname(self):
# pass
#
# def clean(self):
# pass
 
增加和修改,删除简单不示例。
def user_add(request):
# 现在的你# 创建Form类:
if request.method == 'GET':
model_form = UserModelForm()
return render(request,'rbac/user_add.html',{'model_form':model_form})
else:
model_form = UserModelForm(request.POST)
if model_form.is_valid():
model_form.save()
return redirect('/rbac/users.html') return render(request, 'rbac/user_add.html', {'model_form': model_form}) def user_edit(request,pk):
obj = models.UserInfo.objects.filter(pk=pk).first() if not obj:
return redirect('/rbac/users.html')
if request.method == 'GET':
model_form = UserModelForm(instance=obj)
return render(request,'rbac/user_edit.html',{'model_form':model_form})
else:
model_form = UserModelForm(request.POST,instance=obj)
if model_form.is_valid():
model_form.save()
return redirect('/rbac/users.html')
return render(request, 'rbac/user_edit.html', {'model_form': model_form})
 
template
# 表格:
<body>
<a href="/rbac/user/add.html">添加</a>
<table border="">
{% for row in user_list %}
<tr>
<td>{{ row.pk }}</td>
<td>{{ row.nickname }}</td>
<td>{{ row.username }}</td>
<td>
<a href="/rbac/user/edit/{{ row.pk }}.html">编辑</a>
</td>
</tr>
{% endfor %}
</table>
</body> # 添加:
<body>
<h1>添加用户</h1>
<form method="POST" novalidate>
{% csrf_token %}
{{ model_form.as_p }}
<input type="submit" value="提交" />
</form>
</body> # 修改:
<body>
<h1>编辑用户</h1>
<form method="POST" novalidate>
{% csrf_token %}
{{ model_form.as_p }}
<input type="submit" value="提交" />
</form>
</body>

Django【进阶】modelform的更多相关文章

  1. django进阶-modelform&admin action

    先看效果图: 登陆admin后的界面: 查看作者: 当然你也可以定制admin, 使界面更牛逼 数据库表结构: app01/models.py from django.db import models ...

  2. django进阶-3

    先看效果图: 登陆admin后的界面: 查看作者: 当然你也可以定制admin, 使界面更牛逼 数据库表结构: app01/models.py from django.db import models ...

  3. 02:Django进阶篇

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  4. python 自动化之路 day 20 Django进阶/BBS项目【一】

    一.django进阶 1.django orm 增删改查 1.1.创建表: 1 2 3 >>> from blog.models import Blog >>> b ...

  5. python web框架 Django进阶

    django 进阶 基础中,一些操作都是手动创建连接的非主流操作,这样显得太low,当然也是为了熟悉这个框架! 实际中,django自带连接数据库和创建app的机制,同时还有更完善的路由系统机制.既然 ...

  6. Python之路,Day16 - Django 进阶

    Python之路,Day16 - Django 进阶   本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...

  7. Django中ModelForm应用

    Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...

  8. django进阶补充

    前言: 这篇博客对上篇博客django进阶作下补充. 一.效果图 前端界面较简单(丑),有两个功能: 从数据库中取出书名 eg: 新书A 在form表单输入书名,选择出版社,选择作者(多选),输入完毕 ...

  9. django进阶-4

    前言: 下篇博客写关于bootstrap... 一.如何在脚本测试django from django.db import models class Blog(models.Model): name ...

  10. Django进阶篇【1】

    注:本篇是Django进阶篇章,适合人群:有Django基础,关于Django基础篇,将在下一章节中补充! 首先我们一起了解下Django整个请求生命周期: Django 请求流程,生命周期: 路由部 ...

随机推荐

  1. 分页---Vue+.net+bootstrap实现

    通过学习Vue,的确觉的Vue的双向绑定使用起来十分方便,因此研究了一下列表显示时分页的实现,这里我使用了bootstrap的样式,所以在页面中引用bootstrap的样式文件,后台提数据源使用.ne ...

  2. POJ2823_Sliding Window

    以前也碰到过这种类型的题目,以前好像做出来过,但是忘记了,这次又坑了. 题目很简单,对于从前到后每一个连续的长度为k的数字,求出这段数字中的最大的数字和最小的数字. 一开始我用离散化+树状数组来更新和 ...

  3. 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索

    题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...

  4. wp开发(一)--应用发布篇

    本文非常简单,适合刚刚刚刚入门的菜鸟,且针对的是wp8版本.wp8应用的发布总体来说没什么难度,只是有几个值得注意的地方,希望本文可以减少菜鸟们不必要的担心. 首先假设项目已经完成,且要发布到应用商城 ...

  5. 题解 P5015 【标题统计】

    既然这个题这么水 大家不如来盘点一下算法呗 首先说一个事:逗号表达式 这玩意的值是最后一个表达式的值 那么我们就可以愉快的放进循环条件里摩擦 话说这个应该是基础吧,大多数代码都可以这样干 具体可以后面 ...

  6. Jsp遍历后台传过来的List

    1:使用jstl标签 (可以和自定义标签配合使用) 首先引用jstl标签 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" ...

  7. 如何在vi中设置tab的长度

    在使用vi写python时(其实,不管用什么写python程序时,都要注意),首先要将Tab键的长度设为4,因为使用python编程时,我们是通过缩进来实现作用域的,所以要统一Tab键的长度.具体方法 ...

  8. 【learning】加权拟阵与贪心

    首先.. 这篇东西的话算是一个关于拟阵部分知识的小总结,有些语言相对来说偏向便于理解方面,所以可能..有一些说法会不是那么严谨大概是这样 ​ 一些概念 线性无关:一组数据中没有一个量可以写成其余量的线 ...

  9. mysql数据库----视图、触发器、存储过程、函数、事务、索引、其他语句

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...

  10. selenium - switch_to.frame()- 内嵌表单的切换

    表单嵌套frame/iframe webDriver只能在一个页面上对元素识别和定位,对于frame/iframe表单内嵌页面上的元素无法直接定位,此时就需要通过switch_to.frame()方法 ...