Django 四——ModelForm用法
内容概要:
1.新增数据库表中数据
2.更新数据库表中数据
Django的ModelForm
Django中内置了Form和Model两个类,有时候页面的表单form类与Model类是一一对应,因此分别定义Form类和Model类会比较麻烦,最简单的方式就是通过Model来生成一个Form类,Django内置的ModelForm就是为此而生的。
ModelForm 是 Django 中编写基于 Model 定制表单的方法,可以提高 Model 复用性。
使用时 Django 会根据 django.db.models.Field (用于数据库衔接) 自动转化为 django.forms.Field (用于表单前端展示、后端验证)。
1.新增数据库表中数据
views文件夹==》mf.py中
'''
ModelForm的功能介绍:
1.获取所有或指定字段
2.新增数据库表中数据
3.更新数据库表中数据
'''
from django.shortcuts import render
from django import forms
from app01 import models class UModelForm(forms.ModelForm):
class Meta:#定义元类,同时能将关联的数据全部拿到(ForeignKey)
model = models.User #和models.py中的User表关联,注意写法:model,没有s!!!
fields = '__all__' #取全部字段
#新增数据方法,并且同步到数据库
def index(request):
if request.method =='GET':
obj =UModelForm()
return render(request,'mf.html',{'obj':obj})
elif request.method =='POST':
obj = UModelForm(request.POST)
if obj.is_valid():
print(obj.cleaned_data)
# models.User.objects.create(**obj.cleaned_data)#新增数据方法,或者用obj.save()
obj.save()
return render(request, 'mf.html', {'obj':obj})
mf.html中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="/mf/">
{% csrf_token %}
{{ obj.as_p }}
<input type="submit" value="提交">
</form> </body>
</html>
models.py中
from django.db import models class UserType(models.Model):
name = models.CharField(max_length=32)
def __str__(self):
return self.name class User(models.Model):
name = models.CharField(max_length=32)
email = models.EmailField(max_length=32)
u_type = models.ForeignKey('UserType') #一对多
m = models.ManyToManyField('M2M') #多对多 class M2M(models.Model):
name = models.CharField(max_length=32)
def __str__(self):
return self.name
urls.py中
from django.conf.urls import url
from django.contrib import admin
from app01.views import fm
from app01.views import mf urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^fm/', fm.index),
url(r'^aa/', fm.aa),
url(r'^mf/', mf.index),
]
2.更新数据库表中数据
views文件夹==》mf.py中
'''
ModelForm的功能介绍:
1.获取所有或指定字段
2.新增数据库表中数据
3.更新数据库表中数据
'''
from django.shortcuts import render
from django import forms
from app01 import models class UModelForm(forms.ModelForm):
class Meta:#定义元类,同时能将关联的数据全部拿到(ForeignKey)
model = models.User #和models.py中的User表关联,注意写法:model,没有s!!!
fields = '__all__' #取全部字段 #更新数据库中数据
def edit_index(request,nid):
if request.method =='GET':
model_obj = models.User.objects.get(id=nid)
obj =UModelForm(instance=model_obj) #带上现在的值
return render(request,'mf1.html',{'obj':obj,'nid':nid})
elif request.method == 'POST':
model_obj = models.User.objects.get(id=nid) obj = UModelForm(request.POST,instance=model_obj) #这个地方也要加上instance
if obj.is_valid():
obj.save()
return render(request, 'mf1.html', {'obj': obj})
mf1.html中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="/edit-mf-{{ nid }}/">
{% csrf_token %}
{{ obj.as_p }}
<input type="submit" value="提交">
</form> </body>
</html>
models.py中
from django.db import models class UserType(models.Model):
name = models.CharField(max_length=32)
def __str__(self):
return self.name class User(models.Model):
name = models.CharField(max_length=32)
email = models.EmailField(max_length=32)
u_type = models.ForeignKey('UserType') #一对多
m = models.ManyToManyField('M2M') #多对多 class M2M(models.Model):
name = models.CharField(max_length=32)
def __str__(self):
return self.name
urls.py中
from django.conf.urls import url
from django.contrib import admin
from app01.views import fm
from app01.views import mf urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^fm/', fm.index),
url(r'^aa/', fm.aa),
url(r'^mf/', mf.index),
url(r'^edit-mf-(\d+)', mf.edit_index),
]
补充:
https://juejin.im/entry/58d54b2144d90400686847b6
Django 四——ModelForm用法的更多相关文章
- Django(十四)课程机构列表页数据展示,Django的modelform,关于urls的重新分发
关于urls的重新分发: 如果所有url都配置在根路径的urls.py里,会特别多,而且也不易于修改,Django框架里支持urls的重新分发: 1.在根路径的urls配置上: PS:namespac ...
- mysql中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
- Django中ModelForm应用
Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...
- Django的ModelForm
基于django.forms.ModelForm:与模型类绑定的Form 先定义一个ModelForm类,继承ModelForm类 from django.forms import ModelForm ...
- mysql进阶(六)模糊查询的四种用法介绍
mysql中模糊查询的四种用法介绍 这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下. 下面介绍mysql中模糊查询的四种用法: 1 %: 表示任意0个或多个字符.可匹配任意类型 ...
- 【转载】java static 关键字的四种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- [java]static关键字的四种用法
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...
- Django中Model-Form验证
Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...
- c++中for的四种用法
#include <algorithm> #include <vector> #include <iostream> using namespace std; in ...
随机推荐
- 前端seo基础规范
基本规范 TDK代码规范 A: 关键词,一般3~4个最好,要与当前页面内容相关(根据实际情况,不适宜过多堆积关键词): B: 杜绝不同URL的页面标题重复现象,作为搜索结果摘要的重要选择目标之一,一定 ...
- contenttype组件、Django缓存机制以及跨域请求
1 昨日回顾 版本控制 *** (1)url=127.0.0.1/course/?version=v100000 1 versioning_class=QueryParameterVersioning ...
- mockjs模拟数据请求
一般项目的方法 <html> <head> <script> <script src="http://requirejs.org/docs/rele ...
- 【干货】JavaScript DOM编程艺术学习笔记10-12【完】
十.用JavaScript实现动画效果 鼠标放到链接上,每次只显示图片的一小部分,加快加载速度. js: function prepareSlideshow(){ //对象检测 if(!documen ...
- ${fn:} 函数
调用这样一个头文件<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions " ...
- GoDaddy虚拟主机创建FTP 图文流程
有了ftp各种操作就方便多了,也不用通过网页的控制面板来修改代码了 狗爹linux虚拟主机创建FTP 1. 通过虚拟主机管理界面,进入cPanel控制面板 2. 进入FTP管理页面 3. 填写账号.密 ...
- 【ros-kinetic iai_kinect2 opencv2 3 】注意事项
iai_kinect2 : https://github.com/code-iai/iai_kinect2/tree/master/kinect2_registration kinect2_brid ...
- 创建1M-1T的虚拟磁盘(内存盘)——使用破解版 Primo Ramdisk Server Edition v5.6.0
破解版 Primo Ramdisk Server Edition v5.6.0下载: https://pan.lanzou.com/i0sgcne 步骤: 下载并解压后安装“Primo.Ramdisk ...
- 使用selenium的方式获取网页中图片的链接和网页的链接,来判断是否是死链(二)
上一篇使用Java正则表达式来判断和获取图片的链接以及跳转的网址,这篇使用selenium的自带的API(getAttribute)来获取网页中指定的内容 实现内容:获取下面所有图片的链接地址以及跳转 ...
- 模块化Java简介
什么是模块化? 模块化是个一般概念,这一概念也适用于软件开发,可以让软件按模块单独开发,各模块通常都用一个标准化的接口来进行通信.实际上,除了规模大小有区别外,面向对象语言中对象之间的关注点分离与 ...