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. 【C++】深度探索C++对象模型读书笔记--执行期语意学(Runtime Semantics)

    对象的构造和析构: 全局对象 C++程序中所有的global objects都被放置在程序的data segment中.如果显式指定给它一个值,此object将以此值为初值.否则object所配置到的 ...

  2. VS中碰到的问题

    1.调试的时候,语句已经注释掉了,但是在执行的时候还是运行了(或者某些变量值改变后,程序依然用的之前数据). 右键解决方案-->清理,然后重新生成.

  3. 【刷题】BZOJ 1030 [JSOI2007]文本生成器

    Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生 ...

  4. [ZJOI2014]力 FFT

    题面 题解: \[F_j = \sum_{i < j}\frac{q_iq_j}{(i - j)^2} - \sum_{i > j}{\frac{q_iq_j}{(i - j)^2}}\] ...

  5. 常州day7

    Task1 蛤布斯有一个序列,初始为空.它依次将 1-n 插入序列,其中 i 插到当前第 ai 个数的右边 (ai=0 表示插到序列最左边).它希望你帮 它求出最终序列. 对于 100%的数据,n&l ...

  6. 【ZOJ3316】Game(带花树)

    [ZOJ3316]Game(带花树) 题面 Vjudge 翻译: 给定棋盘上\(n\)个旗子 一开始先手可以随便拿, 然后每次都不能取离上次的曼哈顿距离超过\(L\)的旗子 谁不能动谁输. 问后手能否 ...

  7. 【HDU4336】Card Collector (动态规划,数学期望)

    [HDU4336]Card Collector (动态规划,数学期望) 题面 Vjudge 题解 设\(f[i]\)表示状态\(i\)到达目标状态的期望 \(f[i]=(\sum f[j]*p[j]+ ...

  8. 【bzoj4002】有意义的字符串

    Portal --> bzoj4002 Solution ​ 虽然说这题有点强行但是感觉还是挺妙的,给你通项让你反推数列的这种==有点毒 ​​ 补档时间 ​ 首先有一个东西叫做特征方程,我们可以 ...

  9. 【bzoj2500】幸福的道路

    Portal -->bzoj2500 Description ​  给你一棵树,每条边有边权,有两个给给的人第\(i\)天会从编号为\(i\)的点出发走这个点的树上最长距离,现在要你求一个最长的 ...

  10. LOJ #6035.「雅礼集训 2017 Day4」洗衣服 贪心

    这道题的贪心好迷啊~我们对于两个过程进行单独贪心,然后再翻转一个,把这两个拼起来.先说一下单独贪心,单独贪心的话就是用一个堆,每次取出最小的,并且把这个最小的加上他单次的,再放进去.这样,我们得到的结 ...