django中queryset怎么用

导读:今天首席CTO笔记来给各位分享关于django中queryset怎么用的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

问一个django中queryset的问题

from itertools import chain

from operator import attrgetter

#...

post = Post.objects.get(pk=post_id)  # 获取博文

likes = likes = post.like_set.all()  # 获取喜爱信息

# likes = Like.objects.filter(post=post)

reblogs = Post.objects.filter(reblog_from=post)  # 获取转发信息

# 合并喜爱及转发信息,并按时间逆序排序

notes = sorted(chain(likes, reblogs), key=attrgetter(\'created_at\'),

               reverse=True)

#...

使用 itertools.chain 函数合并可迭代对象,查询集为可迭代对象:

list(chain([1,2,3],\'abc\'))[1,2,3,\'a\',\'b\',\'c\']

使用 sorted 函数排序(按对象属性排序)。

django中queryset怎么用  第1张

django如何在queryset外面包一层json,添加result_code

queryset只是结果集,需要将它序列化成可以展示的数据,然后将数据放在HTTP响应中返回。此时可以指定响应的状态码。

写一个例子:

模型为MyModel,其中有字段name,需要返回所有name的列表。

from django.http import JsonResponse

queryset = MyModel.objects.all()

name_list = [instance.name for instance in queryset]

response = JsonResponse(data=name_list, status=201) # 构造一个json响应,响应体为name_list,状态码为201

return response # 返回此响应

如何有效的遍历django的QuerySet

开始的阶段没有遇到什么问题,我们举例,在models有一张员工表employee,对应的表结构中,postion列表示员工职位,前台post过来的参数赋给position,加上入职时间、离职时间,查询操作通过models.filter(position=params)完成,获取的员工信息内容由QuerySet和当前展示页与每页展示的记录数进行简单的计算,返回给前台页面进行渲染展示。编码如下:

1 def get_employees(position, start, end):

2 return employee.objects.filter(alert_time__lt=end,alert_time__gt=start).filter(position__in=position)

3

4

5 @login_required

6 def show(request):

7 if not validate(request):

8 return render_to_response(\'none.html\',

9 context_instance=RequestContext(request, \'msg\':\'params error\')

10 )

11

12 position = request.REQUEST.get(\'position\')

13 time_range = request.REQUEST.get(\'time\')

14 start, end = time_range[0], time_range[1]

15

16 num_per_page, page_num = get_num(request)

17 all_employees = get_employees(position, start, end)

18 # 根据当前页与每页展示的记录数,取到正确的记录

19 employees = employees_events[(page_num-1)*num_per_page:page_num*num_per_page]

20

21 return render_to_response(\'show_employees.html\',

22 context_instance=RequestContext(

23 request,

24 \'employees\': employees,

25 \'num_per_page\': num_per_page,

26 \'page_num\':page_num,

27 \'page_options\' : [50, 100, 200]

28 )

29 )

请教Python里的queryset是什么,以及Objects类的用法?

这是哪儿的django面试题目或者笔试题目吧,请查看django开发手册。

1.queryset是查询集,就是传到服务器上的url里面的查询内容。Django会对查询返回的结果集QuerySet进行缓存,这是为了提高查询效率。也就是说,在你创建一个QuerySet对象的时候,Django并不会立即向数据库发出查询命令,只有在你需要用到这个QuerySet的时候才会这样做。

2.Objects是django实现的mvc中的m,Django中的模型类都有一个objects对象,它是一个Django中定义的QuerySet类型的对象,它包含了模型对象的实例。

3.不能,因为get可能会有异常,可以用filter函数,如下

Entry.objects.filter(blog__id__exact=1)# 显示的使用__exact

Entry.objects.filter(blog__id=1)# 隐含的使用__exact Entry.objects.filter(blog__pk=1)# __pk 相当于 __id__exact

结语:以上就是首席CTO笔记为大家整理的关于django中queryset怎么用的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django中queryset怎么用的相关内容别忘了在本站进行查找喔。

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23 13:56
下一篇 2023-09-23 13:56

相关推荐

发表回复

登录后才能评论