简介:许多朋友询问有关django的QuerySet的问题。本文的首席执行官注释将为您提供详细的答案,以供您参考。我希望这对每个人都会有所帮助!让我们一起看看!
获取模型对象。过滤器获取一组模型对象。类型是QuerySet。它由django定义,并迭代。它可以用作列表操作。每个索引都是一个模型对象。如果要满足多个条件,它将报告一个错误#abit类似的错误:Get IS Fether Fetchon。
QuerySet的一行,QuerySet本身是迭代生成器。如果您想进入第一行并使用类似的作品写作方法,则实际系统将生成固定数量的行SQL。
最近,已经提出了少量需求。在Django模型中,首页的首页上的表单(帖子)提交,帖子参数的背景分析,通过模型查询MySQL,处理数据结构并返回到前台页面以进行显示关于django的Queryset特征的不熟悉,在测试期间发现了许多问题。
舞台开始时没有问题。例如,我们在模型中有一个员工表员工。在相应的表结构中,柱列表示员工位置。操作由模型完成(posity = params)完成。获得的员工信息内容仅由QuerySet和当前显示页面以及每个页面显示的记录数量计算,然后返回到前台页面以进行渲染显示。编码如下:
复制代码
1 def get_employees(位置,开始,结束):
2返回员工。过滤器(posity__in =姿势)
3
4
5 @login_required
6 def show(请求):
7如果没有价值(请求):
8返回render_to_response('none.html',
9 Context_Instance = requestContext(请求,'msg':'params error')
10)
11
12位置= request.request.get('posity')
13 time_range = request.request.get.get('time')
14开始,end = time_range [0],time_range [1]
15
16 num_per_page,page_num = get_num(请求)
17 all_empoloyees = get_employees(姿势,开始,结束)
18#根据当前页面和每个页面显示的记录数量,获取正确的记录
19员工=员工_events [(page_num-1)*num_per_page:page_num*num_per_page]
20
21返回render_to_response('show_employees.html',
22 context_instance = requestContext(
23请求,
24个“员工”:员工,
25'num_per_page':num_per_page,
26'page_num':page_num,
27“ page_options”:[50,100,200]
28)
29)
复制代码
运行后,您可以正确显示您查询的员工信息,并且查询速度很快。员工表具有不同位置的员工信息,不同类型的详细信息不同。假设员工有一个名为Infomation的专栏,则存储了员工的详细信息。Male','normanity':'dermanity','''':“医生”,'Motto':'只是做'},目前的需求是要显示更详细的员工信息。除了出发时间,还将筛选信息中的内容。这是查询中国国籍的设计师的一个例子。根据先前的代码,您需要进行一些修改。员工员工存储在MySQL中,而MySQL是一个ORM数据库。它不能像MongoDB那样提供更强大的聚合物函数,因此无法通过对象提供的方法执行。然后,您需要在类型后过滤数据并执行第二次遍历。它用于确定当前记录是否需要返回显示。在显示过程中,您需要计算基于num_per_page和page_num显示数据启动和终止位置的需求。
QuerySet只是结果集。它需要将其序列化为显示的数据,然后将数据放入HTTP响应中。这次,您可以指定响应的状态代码。
写一个示例:
该模型是MyModel,那里有一个字段名称,所有名称列表都需要返回。
来自django.http导入jsonresponse
querySet = mymodel.objects.all()
name_list = [instance。
响应= jsonresponse(data = name_list,status = 201)#构造json响应,响应主体是name_list,状态代码为201
返回响应#返回此响应
来自Itertools进口链
从操作员导入attergetter
#...
post = post.objects.get(pk = post_id)#获取博客文章
喜欢= likes = post.like_set.all()#
#likes = like.objects.filter(post = post)
reblogs = post.objects.filter(reblog_from = post)#获取转发信息
#,并在时间上排序
notes =排序(链(喜欢,reblogs),key = attergetter('create_at'),
反向= true)
#...
使用itertools.chain函数合并迭代对象。查询集是迭代对象:
列表(链([1,2,3],'abc')[1,2,3,'a','b','c']
使用排序的函数进行排序(根据对象属性进行排序)。
结论:以上是首席CTO注释引入的Django中QuerySet的所有内容。我希望这对每个人都会有所帮助。如果您想进一步了解这一点,请记住要收集对该网站的关注。