当前位置: 首页 > 网络应用技术

什么是django中的queryset

时间:2023-03-05 21:23:43 网络应用技术

  简介:许多朋友询问有关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的所有内容。我希望这对每个人都会有所帮助。如果您想进一步了解这一点,请记住要收集对该网站的关注。