码迷,mamicode.com
首页 > 其他好文 > 详细

django中的filter(), all(), get()

时间:2019-06-14 10:53:31      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:inf   super   djang   end   models   boolean   sql语句   cts   name   

1. 类名.objects中的get(), filter(), all() 的区别

下面定义两个模型类,分别为BookInfo, HeroInfo, BookInfo与HeroInfo为一对多的关系,代码如下:

from django.db import models

class BookInfoManager(models.Manager):
    def get_queryset(self):
        return super(BookInfoManager,self).get_queryset().filter(isDelete=False)
    def create(self, btitle, bpub_date):
        b = BookInfo()
        b.btitle = btitle
        b.bpub_date = bpub_date
        b.bread = 0
        b.bcommet = 0
        b.isDelete = False
        return b

class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)
    bpub_date = models.DateTimeField()
    bread = models.IntegerField(default=0)
    bcommet = models.IntegerField(default=0)
    isDelete = models.BooleanField(default=False)
    class Meta:
        db_table = bookinfo‘  #  此处不定义表名的话,默认表名为应用名+模型类名(小写)
    books1 = models.Manager()
    books2 = BookInfoManager()

class HeroInfo(models.Model):
    hname = models.CharField(max_length=20)
    hgender = models.BooleanField(default=False)
    isDelete = models.BooleanField(default=True)
    hcontent = models.CharField(max_length=100)
    hbook = models.ForeignKey(BookInfo)
    class Meta:
        db_table = heroinfo

插入数据后的表格为:

bookinfo:

技术图片

heroinfo:

技术图片

 

 查看  类名.objects中的get(), filter(), all()  得到的结果是什么,如下

技术图片

通过type(),查看它们的类型

技术图片

可以看出,通过get()查询,返回的结果为模型类(即为表格),说明使用get方法会直接执行sql语句获取数据(不可迭代),而filter()以及all()返回的结果为查询集(QuerySet)对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。

 2. 涉及外键的一些查询说明:

(1)通过通过查询集对象查询涉及外键的属性时,得到的结果为外键所关联的模型类,如下图(查询HeroInfo的hbook属性,得到的是BookInfo模型类)

技术图片

 

django中的filter(), all(), get()

标签:inf   super   djang   end   models   boolean   sql语句   cts   name   

原文地址:https://www.cnblogs.com/jj1106/p/11022077.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!