模型实例方法

  • str:在将对象转换成字符串时会被调用
  • save():将模型对象保存到数据表中
  • delete():将模型对象从数据表中删除

模型类的属性

  • 属性objects:管理器,是Manager类型的对象,用于与数据库进行交互
  • 当没有为模型类定义管理器时,Django会为模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects
  • 为模型类BookInfo定义管理器books语法如下
class BookInfo(models.Model):
    ...
    books = models.Manager()

管理器Manager

  • 管理器是Django的模型进行数据库操作的接口,Django应用的每个模型都拥有至少一个管理器
  • Django支持自定义管理器类,继承自models.Manager
  • 自定义管理器类主要用于两种情况
    • 1.修改原始查询集,重写get_queryset()方法
    • 2.向管理器类中添加额外的方法,如创建对象
  • 1.修改原始查询集,重写get_queryset()方法
  • 打开booktest/models.py文件,定义类BookInfoManager
#图书管理器
class BookInfoManager(models.Manager):
    def get_queryset(self):
        #默认查询未删除的图书信息
        #调用父类的成员语法为:super(子类型, self).成员
        return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
  • 在模型类BookInfo中定义管理器
class BookInfo(models.Model):
    ...
    books = BookInfoManager()

管理器1

  • 2.在管理器类中定义创建对象的方法
  • 当创建模型类对象时,django不会对数据库进行读写操作,调用save()方法才与数据库交互,进行insert或update操作,将数据保存到数据库中
  • 如果模型类的属性比较多,逐个属性赋值很麻烦,推荐使用管理器方式
  • 打开booktest/models.py文件,定义方法create
class BookInfoManager(models.Manager):
    ...
    #创建模型类,接收参数为属性赋值
    def create(self, title, pub_date):
        #创建模型类对象self.model可以获得模型类
        book = self.model()
        book.btitle = title
        book.bpub_date = pub_date
        book.bread=0
        book.bcommet=0
        book.isDelete = False
        return book
  • 为模型类BookInfo定义管理器books语法如下
class BookInfo(models.Model):
    ...
    books = BookInfoManager()

管理器2

  • 调用语法如下:
调用:book=BookInfo.books.create_book("abc",date(1980,1,1))
保存:book.save()

示例

1.配置url

  • 打开test2/urls.py文件,配置url如下:
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    #引入booktest的url配置
    url(r'^',include('booktest.urls'))
]
  • 在booktest应用下创建urls.py文件,代码如下:
from django.conf.urls import url
from . import views

urlpatterns=[
    url(r'^$',views.index),
    url(r'^delete(\d+)$',views.delete),
    url(r'^create$',views.create),
]

2.定义视图

  • 打开booktst.views.py文件,定义视图代码如下:
#coding=utf-8
from django.shortcuts import render,redirect
from models import *
from datetime import date

#查询所有图书并显示
def index(request):
    list=BookInfo.books.all()
    return render(request,'booktest/index.html',{'list':list})
#创建新图书
def create(request):
    book=BookInfo.books.create('流星蝴蝶剑',date(1995,12,30))
    book.save()
    #转向到首页
    return redirect('/')
#逻辑删除指定编号的图书
def delete(request,id):
    book=BookInfo.books.get(pk=int(id))
    book.isDelete=True
    book.save()
    #转向到首页
    return redirect('/')

3.创建模板

  • 打开test2/settings.py文件,配置模板查找目录TEMPLATES的DIRS
'DIRS': [os.path.join(BASE_DIR,'templates')],

模板目录

  • 创建templates/booktest/index.html文件

模板文件

  • 模板代码如下:
<html>
<head>
    <title>Title</title>
</head>
<body>
<a href="/create/">创建</a>
<ul>
{%for book in list%}
    <li>{{book.btitle}}--<a href="/delete{{book.id}}/">删除</a></li>
{%endfor%}
</ul>
</body>
</html>

4.运行

  • 运行服务器
python manage.py runserver
  • 在浏览器中查看

首页

  • 操作效果如下图

运行

  • 在mysql命令行中查看数据表变化如下图

数据变化