教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

如何在管理器Manager中修改和创建对象?

更新时间:2022年11月14日15时48分 来源:传智教育 浏览次数:

管理器是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()

模型类BookInfo中定义管理器

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()

为模型类BookInfo定义管理器books

调用语法如下:

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



0 分享到:
和我们在线交谈!