Django之Model
1. Django模型概述
Django使用自带的ORM
ORM(Object Relational Mapping) 用于实现面向对象编程语言里不同类型系统的数据之间的转换

优点:
提高开发效率
不同数据库平滑切换
缺点:
ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
长期写 ORM 代码,会降低编写 SQL 语句的能力。
ORM解析过程:
1. ORM 会将 Python 代码转成为 SQL 语句。
2. SQL 语句通过 pymysql 传送到数据库服务端。
3. 在数据库中执行 SQL 语句并将结果返回。

2. 数据库配置
1. 创建mysql数据库,因为ORM只能操作数据表,所以库还是需要自己手工创建。
create database yangjianbo default charset=utf8;
2. 在项目的settings.py文件中,修改以下内容:
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'yangjianbo', # 数据库名称
'HOST': '172.168.1.222', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 37118, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '**********', # 数据库密码
}
}
3. Django使用pymysql模块连接mysql数据库
1. linux安装pymysql
pip3 install pymysql
2. pycharm安装pymysql

3. 在与settings.py同级目录下的__init__.py中引入模块,进行配置
import pymysql pymysql.install_as_MySQLdb()
3. 定义模型
1. 创建项目和应用
参照前文
2. 创建表结构
1. 修改应用下的model.py文件,定义一个类
from django.db import models
class students(models.Model):
name = models.CharField(max_length=20)
2. 生成迁移文件
python manage.py makemigrations [应用名称]
这个命令用于告诉 Django 你对模型做了哪些修改(添加了新模型、修改了字段等),并且希望这些修改反映在数据库中。执行这个命令后,Django 会检测你的模型定义文件(通常是 models.py),并生成与之相关的迁移文件(migration files),这些文件描述了如何在数据库中进行相应的更改。
3. 应用迁移文件到数据库
python manage.py migrate [应用名称]
这个命令用于实际地应用迁移文件,即将模型的变更应用到数据库中。执行这个命令后,Django 会查找尚未应用的迁移文件并执行它们,将数据库结构更新为与模型定义文件中的内容一致。
4. 在数据库上查一下表结构
看到产生了很多表,其中我自己的APP表为yangjianbo_student,表中有两个字段,一个是自动产生的id,并且是主键,一个是在model.py中定义的。
4. 数据库操作简单介绍
以上面的students作为例子
1. 添加数据
1. 在应用下面,创建一个单独的python文件,当然你也可以直接用views.py,但是最好是独立使用一个py文件
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from shuaige.models import students
# 数据库操作
def testdb(request):
test1 = students(name='yiakun')
test1.save()
return HttpResponse("<p>数据添加成功</p>")
2. 在urls.py文件中,创建对应的path,需要先把对应的文件导入进来
from django.contrib import admin
from django.urls import path
from shuaige import tests
urlpatterns = [
path('testdb/',tests.testdb)
]
3. 访问http://127.0.0.1:8000/testdb
2. 获取数据
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from yangjianbo.models import students
def testdb(request):
# 初始化
response = ""
response1 = ""
# 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
list = students.objects.all()
# filter相当于SQL中的WHERE,可设置条件过滤结果
response2 = students.objects.filter(id=1)
# 获取单个对象
response3 = students.objects.get(id=2)
# 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
response4=students.objects.order_by('name')[0:2]
# 数据排序
response5=students.objects.order_by("id")
# 上面的方法可以连锁使用
response6=students.objects.filter(id=2).order_by("id")
# 输出所有数据
for var in list:
response1 += var.name + " "
response = response1
return HttpResponse("<p>" + response + "</p>")
3. 更新数据
def updatedata(request):
# 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
test1 = students.objects.get(id=2)
test1.name = 'diaomaohou'
test1.save()
# 另外一种方式
# test1= students.objects.filter(id=1).update(name='akun')
# 修改所有的列
# students.objects.all().update(name='yuanshao')
return HttpResponse("<p>修改成功</p>")
4. 删除数据
def deldata(request):
# 删除id=1的数据
test1 = students.objects.get(id=1)
test1.delete()
# 另外一种方式
# Test.objects.filter(id=1).delete()
# 删除所有数据
# Test.objects.all().delete()
return HttpResponse("<p>删除成功</p>")
5. 单表操作
1. 创建模型并插入数据
1. 在app目录的model.py中添加以下类
class Sites(models.Model):
id = models.AutoField(primary_key=True) # id 会自动创建,可以手动写入
title = models.CharField(max_length=32) # 书籍名称
price = models.DecimalField(max_digits=5, decimal_places=2) # 书籍价格
publish = models.CharField(max_length=32) # 出版社名称
pub_date = models.DateField() # 出版时间
2. 在命令行执行
python manage.py makemigrations python manage.py migrate
3. 在app目录的urls.py中添加
from django.contrib import admin
from django.urls import path
from shuaige import views
from shuaige import book
urlpatterns = [
path('admin/', admin.site.urls),
path('add_book/',book.add_book)
]
4. 在app目录下的book.py文件中添加
from django.http import HttpResponse
from shuaige.models import Sites
def add_book(request):
book = Sites(title="菜鸟教程",price=300,publish="菜鸟出版社",pub_date="2008-8-8")
book.save()
return HttpResponse("<p>数据添加成功!</p>")
5. 访问地址http://172.16.7.244:8081/add_book
6. 第二种方法插入数据
def add_book(request):
books = Sites.objects.create(title="如来神掌",price=200,publish="功夫出版社",pub_date="2010-10-10")
print(books, type(books)) # Book object (18)
return HttpResponse("<p>数据添加成功!</p>")
2. 查找数据
1. all()方法来查询所有内容
返回的是 QuerySet 类型数据,类似于 list,里面放的是一个个模型类的对象,可用索引下标取出模型类的对象。
urls.py内容
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
]
views.py内容
def findall_book(request):
books = models.Sites.objects.all()
# print(books,type(books)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。
for i in books:
print (i,i.title)
return HttpResponse("<p>查找成功!</p>")
2. filter()用于查询符合条件的数据
返回的是 QuerySet 类型数据,类似于 list,里面放的是满足条件的模型类的对象,可用索引下标取出模型类的对象。
pk=3 的意思是主键 primary key=3,相当于 id=3。
因为 id 在 pycharm 里有特殊含义,是看内存地址的内置函数 id(),因此用 pk。
views.py文件
def filter_book(request):
books = models.Sites.objects.filter(pk=3)
print(books)
print("//////////////////////////////////////")
books = models.Sites.objects.filter(publish='菜鸟出版社', price=300)
print(books, type(books)) # QuerySet类型,类似于list。
return HttpResponse("<p>查找成功!</p>")
urls.py文件
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
]
3. exclude()方法用于查询不符合条件的数据
返回的是 QuerySet 类型数据,类似于 list,里面放的是不满足条件的模型类的对象,可用索引下标取出模型类的对象。
views.py
def exclude_book(request):
books = models.Sites.objects.exclude(pk=3)
print(books)
print("//////////////////////////////////////")
books = models.Sites.objects.exclude(publish='菜鸟出版社', price=300)
print(books, type(books)) # QuerySet类型,类似于list。
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
]
4. get()方法用于查询符合条件的返回模型类的对象只能为一个
超过了一个或没有就报错。返回的是模型对象。
views.py
def get_book(request):
books = models.Sites.objects.get(pk=3)
# books = models.Sites.objects.get(pk=5)
print(books,type(books))
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
]
结果:
1. 有且只有一个,结果:Sites object (3) <class 'yangjianbo.models.Sites'>
2. 如果超过一个或没有结果,那么报错。

5. order_by()方法用于对查询结果进行排序
返回的是QuerySet类型数据,可用索引下标取出模型类的对象。
注意:
1. 参数的字段名要加引号
2. 降序为在字段前面加个负号-
views.py
def order_book(request):
# books = models.Sites.objects.get(pk=3)
books = models.Sites.objects.order_by("price") #按照price升序排列
print(book,type(books))
# books = models.Sites.objects.order_by("-price") #按照price降序排列
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
]
6. reverse()方法用于对查询结果进行反转
返回的是QuerySet类型,可用索引下标取出模型的对象
views.py
def reverse_book(request):
# 按照价格降序排列:降序再反转
books = models.Sites.objects.order_by("-price").reverse()
print(books,type(books))
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
]
结果: 先把数据按照价格降序,然后进行反转就是升序。
7. count()方法用于查询结果的统计,返回的是整数
views.py
def count_book(request):
books=models.Sites.objects.count()
print(books)
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
]
8. first()返回第一条数据,返回的数据是模型类的对象
views.py
def first_book(request):
books=models.Sites.objects.first()
print(books.price)
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
]
9. last()返回最后一条数据,返回的数据是模型类的对象,不能用索引下标-1,ORM没有逆序索引。
views.py
def last_book(request):
books=models.Sites.objects.last()
print(books.price,books.title)
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
url(r'last_book/', views.last_book),
]
10. exist()方法用于判断查询的结果QuerySet列表里是否有数据
返回的数据类型是布尔,有为true,没有为false
注意:判断的数据类型只能为QuerySet类型数据,不能为整型和模型类的对象。
views.py
def exists_book(request):
# books=models.Sites.objects.exists() #显示的结果为True
# books=models.Sites.objects.last().exists() #显示的结果报错,说没有这个属性exists,因为last()的数据类型是对象
books=models.Sites.objects.count().exists() #显示的结果报错,说int没有这个属性exists,因为count()的数据类型为整型
print(books)
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
url(r'last_book/', views.last_book),
url(r'exists_book/', views.exists_book),
]
结果: 返回的结果为布尔值,true或者false,只支持QuerySet类型,其它类型没有exists这个属性。
11. valuse()方法用于查询部分字段的数据
返回的是QuerySet类型数据,类似于list,里面不是模型类的对象,而是一个可迭代的字典序列,字典里的键是字段,值是数据。
注意:
参数的字段名要加引号
想要字段名和数据用values
views.py
def values_book(request):
books=models.Sites.objects.values("title")
print(books)
print(books[2])
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
url(r'last_book/', views.last_book),
url(r'exists_book/', views.exists_book),
url(r'values_book/', views.values_book),
]
结果:
12. values_list()方法用于查询部分字段的数据
返回的是QuerySet类型数据,类似于list,里面不是模型类的对象,而是一个个元组,元组里放的是查询字段对应的数据
注意:
参数的字段名要加引号
只想要数据用values_list
views.py
def values_list_book(request):
books=models.Sites.objects.values_list("title")
print(books)
print(books[2])
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
url(r'last_book/', views.last_book),
url(r'exists_book/', views.exists_book),
url(r'values_book/', views.values_book),
url(r'values_list_book/', views.values_list_book),
]
结果:
<QuerySet [('菜鸟教程',), ('菜鸟教程',), ('如来神掌',), ('猴子偷桃',), ('袁绍吃鸡',)]>
('如来神掌',)
13. distinct()方法用于对数据进行去重
返回的是QuerySet类型数据
注意:
对模型类的对象去重没有意义,因为每个对象都是不一样的存在
distinct()一般是联合values或者values_list使用
views.py
def distinct_book(request):
# 查询一共有多少个出版社
books = models.Sites.objects.values_list("title").distinct() # 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在。
books = models.Sites.objects.distinct() #返回的结果是QuerySet
print(books)
return HttpResponse("<p>查找成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
url(r'last_book/', views.last_book),
url(r'exists_book/', views.exists_book),
url(r'values_book/', views.values_book),
url(r'values_list_book/', views.values_list_book),
url(r'distinct_book/', views.distinct_book),
]
结果:
<QuerySet [('菜鸟教程',), ('如来神掌',), ('猴子偷桃',), ('袁绍吃鸡',)]>
<QuerySet [<Sites: Sites object (1)>, <Sites: Sites object (2)>, <Sites: Sites object (3)>, <Sites: Sites object (4)>, <Sites: Sites object (5)>]>
14. filter()方法还可以用于模糊查询
views.py
def filter_book(request):
# books = models.Sites.objects.filter(pk=3)
# books = models.Sites.objects.filter(publish='菜鸟出版社', price=300)
# books=models.Sites.objects.filter(price__in=[200,400]) #查询价格为200或者400的图书
# books = models.Sites.objects.filter(price__gt=200) #查询价格大于200的图书
# books = models.Sites.objects.filter(price__gte=200) #查询价格大于等于200的图书
# books = models.Sites.objects.filter(price__lt=200) #查询价格小于200的图书
# books = models.Sites.objects.filter(price__lte=200) #查询价格小于等于200的图书
# books = models.Sites.objects.filter(price__range=[100,400]) #查询价格在100,到400之间的图书,包含100和400
# books = models.Sites.objects.filter(title__contains="桃") #查询书名包含"桃"的图书
# books=models.Sites.objects.filter(title__icontains="鸡") #查训书名包含"鸡"的图书,不区分大小写
# books=models.Sites.objects.filter(title__startswith="猴") #以某个字符开头
# books = models.Sites.objects.filter(title__endswith="程") #以某个字符结尾
# books = models.Sites.objects.filter(pub_date__year=2020) #查询2020年的记录
# books = models.Sites.objects.filter(pub_date__month=6) #查询6月的记录
books = models.Sites.objects.filter(pub_date__day=10) #查询10号的记录
for i in books:
print(i.title,i.price)
return HttpResponse("<p>查找成功!</p>")
3. 删除数据
1. 删除模型类的对象
views.py
def delete_book(request):
books=models.Sites.objects.last().delete()
return HttpResponse("<p>删除成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
url(r'last_book/', views.last_book),
url(r'exists_book/', views.exists_book),
url(r'values_book/', views.values_book),
url(r'values_list_book/', views.values_list_book),
url(r'distinct_book/', views.distinct_book),
url(r'delete_book/', views.delete_book),
]
2. 删除QuerySet类型数据
返回值:元组,第一个元素为受影响的行数
views.py
def delete_book(request):
# books=models.Sites.objects.last().delete() #直接删除对象
books=models.Sites.objects.filter(id__in=[1,2]).delete()
return HttpResponse("<p>删除成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
url(r'last_book/', views.last_book),
url(r'exists_book/', views.exists_book),
url(r'values_book/', views.values_book),
url(r'values_list_book/', views.values_list_book),
url(r'distinct_book/', views.distinct_book),
url(r'delete_book/', views.delete_book),
]
结果: 删除id=1或者id=2的记录
注意:
1. Django 删除数据时,会模仿 SQL约束 ON DELETE CASCADE 的行为,也就是删除一个对象时也会删除与它相关联的外键对象。
2. delete() 方法是 QuerySet 数据类型的方法,但并不适用于 Manager 本身。也就是想要删除所有数据,不能不写 all。
books=models.Book.objects.delete() # 报错 books=models.Book.objects.all().delete() # 删除成功
4. 修改数据
1. 模型类的对象
views.py
def update_book(request):
books=models.Sites.objects.first()
books.price=600
books.save()
return HttpResponse("<p>修改成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
url(r'last_book/', views.last_book),
url(r'exists_book/', views.exists_book),
url(r'values_book/', views.values_book),
url(r'values_list_book/', views.values_list_book),
url(r'distinct_book/', views.distinct_book),
url(r'delete_book/', views.delete_book),
url(r'update_book/', views.update_book),
]
结果: 将第一条数据的price修改为600
2. QuerySet类型数据
返回的结果是整数,受影响的行数
views.py
def update_book(request):
# books=models.Sites.objects.first()
# books.price=600
# books.save()
books=models.Sites.objects.filter(pk=3).update(price=888)
print(books)
return HttpResponse("<p>修改成功!</p>")
urls.py
from django.conf.urls import url
from yangjianbo import views
urlpatterns = [
url(r'^index/(?P<m>[0-9]{2})/$', views.index,name="index"),
url(r'login1/', views.login, name="login"),
url(r'add_book/', views.add_book),
url(r'findall_book/', views.findall_book),
url(r'filter_book/', views.filter_book),
url(r'exclude_book/', views.exclude_book),
url(r'get_book/', views.get_book),
url(r'order_book/', views.order_book),
url(r'reverse_book/', views.reverse_book),
url(r'count_book/', views.count_book),
url(r'first_book/', views.first_book),
url(r'last_book/', views.last_book),
url(r'exists_book/', views.exists_book),
url(r'values_book/', views.values_book),
url(r'values_list_book/', views.values_list_book),
url(r'distinct_book/', views.distinct_book),
url(r'delete_book/', views.delete_book),
url(r'update_book/', views.update_book),
]
结果: 1
6. 多表操作

浙公网安备 33010602011771号