内容概要:

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 

 

最新文章

  1. MySql数据库:Host &#39;localhost&#39; is not allowed to connect to this MySQL server
  2. DAC Usage2:通过DAC实现DB Schema的Migration和Upgrade
  3. android android 判断是否滑动
  4. Kerberos是怎么工作的?
  5. Linux下select&amp;poll&amp;epoll的实现原理(一)
  6. ArcEngine 异常:field is not editable
  7. 国内外常用的DNS服务器
  8. HTML5简单入门系列(五)
  9. Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
  10. HUSTOJ:Transit Tree Path
  11. npm --save 、-D 、--save -dev
  12. 5+移动App
  13. 第二阶段第九次spring会议
  14. flask 文件转为pdf并添加二维码
  15. C#实现复杂XML的序列化与反序列化
  16. 浅谈树状数组(为什么lowbit(x)=x&amp;(-x)
  17. hash bucket
  18. winhex模版
  19. Golang接口简单了解
  20. Java NIO系列教程(四) Scatter/Gather

热门文章

  1. Vue2.0搭建脚手架(vue-cli)
  2. JAVA中日期格式转换各个字母代表含义
  3. 12个非常不错的javascript类库
  4. c#中反射技术在Unity中的运用
  5. 《Python高效开发实战》实战演练——建立应用2
  6. Kyligence Analytics Platform Enterprise
  7. LeetCode Missing Number (简单题)
  8. thinkphp 3.2.3版本学习笔记
  9. Extjs4.1+desktop+SSH2 定义程序入口
  10. WQS二分学习笔记