内容概要:

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用法的更多相关文章

  1. Django(十四)课程机构列表页数据展示,Django的modelform,关于urls的重新分发

    关于urls的重新分发: 如果所有url都配置在根路径的urls.py里,会特别多,而且也不易于修改,Django框架里支持urls的重新分发: 1.在根路径的urls配置上: PS:namespac ...

  2. mysql中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...

  3. Django中ModelForm应用

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

  4. Django的ModelForm

    基于django.forms.ModelForm:与模型类绑定的Form 先定义一个ModelForm类,继承ModelForm类 from django.forms import ModelForm ...

  5. mysql进阶(六)模糊查询的四种用法介绍

    mysql中模糊查询的四种用法介绍 这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下. 下面介绍mysql中模糊查询的四种用法: 1 %: 表示任意0个或多个字符.可匹配任意类型 ...

  6. 【转载】java static 关键字的四种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  7. [java]static关键字的四种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  8. Django中Model-Form验证

    Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...

  9. c++中for的四种用法

    #include <algorithm> #include <vector> #include <iostream> using namespace std; in ...

随机推荐

  1. springBoot jpa uuid生成策略

    实体类 import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; @Entity @Table(na ...

  2. zabbix 监控项

    监控项 概述 监控项是从主机收集的数据信息. 配置主机后,你需要添加一些监控项以开始获取实际数据. 一个监控项是一个独立的指标.快速添加多个监控项的一种方法是将一个预定义的模板附加到主机.然而,为了优 ...

  3. Zabbix邮件报警设置方法

    实现目的: 在Zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报警邮件到指定邮箱. 具体操作: 以下操作在Zabbix监控服务端进行 备注:Zabbix监控服务端 操 ...

  4. JavaScript and Ruby in ABAP

    Netweaver里有个mini JavaScript engine CL_JAVA_SCRIPT, 对于Js code的编译和执行都是用system call完成. 只能当玩具用:report SJ ...

  5. 提升Web性能的8个技巧总结

    提升Web性能的8个技巧总结 在互联网盛行的今天,越来越多的在线用户希望得到安全可靠并且快速的访问体验.针对Web网页过于膨胀以及第三脚本蚕食流量等问题,Radware向网站运营人员提出以下改进建议, ...

  6. java 类和成员的修饰符

  7. lsscsi 与 cat /proc/scsi/scsi

    [root@localhost ~]# lsscsi[0:0:0:0]    disk    SEAGATE  ST300MM0048      N001  /dev/sda [0:0:2:0]    ...

  8. 多GPU设备处理点积示例

    多GPU设备处理点积示例,项目打包下载 /* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. * * NVIDIA Cor ...

  9. 解决Jquery中使用each循环时,循环外的js依旧会执行

    今天在改项目bug时,发现一个问题,我获取一个div中所有的input,并取值时,判断某一条件,但是循环外的js依然可以执行. $(".tab-reg-next input").e ...

  10. 记录JQ-WEUI中滚动加载的一个BUG

    最近写微信公众号,用到的技术栈是jq+vue的混合开发,采用的UI是移动端比较火的WEUI,在微信开发中应该较广泛.个人看惯了elementUI文档,相对于饿了么组件文档的详细,WEUI的文档还是比较 ...