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模型类)
原文地址:https://www.cnblogs.com/jj1106/p/11022077.html
时间: 2024-10-16 19:54:29