Code前端首页关于Code前端联系我们

Django QuerySet 对象示例(model.objects):有哪些常用且高效的方法?

terry 2年前 (2023-09-24) 阅读数 55 #后端开发

新建一个项目,在项目中创建一个应用程序并命名。将应用程序值添加到settings.py,然后配置数据库连接设置。

在应用内模型中创建新模型:

1234567891011121314151617181920212223242526272829303132333435363738394041z django.db import❀♻ s #在这里创建您的模型。课程 4 ) 年龄 = ) ❀ 电子邮件 = models.EmailField() 4 . 型号 ): """发布型号""" 名称 =❙ Fi.(max_length=300元: ‼‼‼ 书(型号.型号): ? =300) =现场模型。价格= models.FloatField () #书价 评分=型号)el.Float。作者= 型号.ForeignKey(作者, on_delete=models.CASCADE)发布者=‸模型。外键(发布者,on_delete=models.CASCADE)class元:
1234567891011

db_table '书' 图书订购(型号.型号): """图书订购型号""" 图书型号

=

“书”​​,on_delete=模型.CASCADE) 价格= ❙ F F #书籍实际价格已售出 class 元:db_table =‼♻= ‼ 'book_order'

makemigration后,进行迁移

,然后手动将数据添加到表中,例如我添加的信息:

Django QuerySet对象(模型.objects)示例:高效常用方法有哪些?

Django QuerySet对象(模型.objects)示例:高效常用方法有哪些?

Django QuerySet对象(模型.objects)示例:高效常用方法有哪些?

Django QuerySet对象(模型.objects)示例:高效常用方法有哪些?

然后配置URL,直到项目运行成功。

1.filter:

过滤,提取符合条件的数据并返回一个新的QuerySet。

2。排除:

排除,排除符合条件的数据并返回一个新的QuerySet。

例如,删除一本书中id大于等于2的书,并且id不能等于3的书。示例代码:

books = models.Book.objects.filter(id__gt=1).exclude(id=3)

我们也可以使用Q表达式来实现,

from django import。
书籍 = models.Book.objects.filter(id__gt=1).filter(~Q(id=3))

3。 annotate:

为QuerySet中的每个对象添加用法查询表达式(聚合函数、F表达式、Q表达式、Func表达式等)的新字段。

例如添加一个名为author_name

的字段 from django.db.models import F
books = models.Book.objects.annotate(author_name = F('author__name:')不在书籍模型中

首先没有作者姓名属性,只有一个由作者属性链接的外键。

author_name 是 book 下的作者属性下的姓名,即 book 表通过外键访问author 表中的 name 值

上面的代码做完后,会在书中创建一个新的author_name属性,但它只是在内存中,不会映射到数据库。负号。

示例

1234567891011def 索引2(请求): # 1. 将一本大书分类。 #书籍=模型。 Book.objects.order_by('price') # 书中的书: # print("%s-%s"%(book.name, book.price)) ? s.order_by( '-价格') 书籍: 打印“% s-%s” %(名称.书籍,价格.书籍​​))
1234567891011
1234567891011
12345678910111213141516
12345678910111213141516
12345678910111213141516 ttpResponse( ‘成功’)

编辑对应的注释代码即可查看效果。

要求:按价格排序。如果价格相同,则按页数排序。价格由小到大,页数由大到小。为了方便地看到效果,可以先编辑数据库中的数据。

12345678910111213141516defIndex2(请求):##1.对账面价格属性从小到大的❙#书籍 ) # for books in books: # print("%s-%s"%(bookname,book.price) # 2. 对价格属性进行排序书中从大到小: # print("%s-%s"%(name.book,price.book)) # 3. 对价格进行排序.如果有价格相同的就用页码排序,价格从小到大,页数从大到小。 books = models.Book.objects。 order_by(' !! '-页') v打印() "%s-%s-%s" % (书名,书价,书页数))返回'' ' ❙HttpResponse(❙HttpResponse )

注意:

books = models.Book.objects.order_by('price','-pages') 不等于 books = models.Book.objects .order_by('price').order_by('-pages')

如果使用多个order_by命令打破了之前的排序规则,只使用最后一种排序方法。

order_by 方法不会更改信息在数据库中的位置,它只是提取数据并对其进行排序。

所以如果我们对数据库中的信息进行排序,那么我们就不必每次获取数据时都进行排序。需要做什么?

我们需要向模型添加一些代码。

例如:我们按照布克恶搞模型对奖品进行排序。如果价格相同,我们按照页数排名。价格由小到大,页数由大到小。

修改图书元类中的代码:

123Class meta: db_table = '图书订单' = ['价格',‸❙‸'‸‼️这样数据库中的信息就排序好了。我们在删除数据时,不需要使用order_by来排序。但这需要重新进行迁移和迁移,所以这里就不演示了。

请求:按照每本书的销量排序

from django.db.models import Q,F,Count

def index2(request):

1234567891011121314151617181920# book book 1.从小到大排序# books = models.Book.objects.order_by('price')# for books in books:# print("%s-%s"%(bookname ,book.price))# 2.将书本中的价格属性从大到小排序# books = models.Book.objects.order_by('-price')# for books in books :# print(" %s -%s"%(书名,书价))# 3. 对价格进行排序。如果价格相同,则按页数排序。价格由小到大,页数由大到小。# books = models.Book.objects.order_by('price','-pages')# for books in books:# print("%s-%s-%s"%(书名,价格。书本,页数 sale_num=

Count(

'bookorder__id')).order_by(❙⁄‼

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门