老师想问下 get_ordering 应该怎么写

来源:6-2 完成动态列表页开发

李嘉图principal

2019-06-21

如何获取到get_queryset中过滤的结果?
get_ordering 函数需要返回什么(如何表示field or fields)?
能否给我一个例子参考一下 谢谢

写回答

2回答

Jack

2019-06-22

def get_ordering(self)只能返回模型类中已有的字段,可以在函数中写好,也可以接收前端传递过来的,如

class CarList(ListView):
    model = Car
   paginate_by = 30

   ordering = 'car_id_internal'
   def get_ordering(self):
       self.order = self.request.GET.get('order', 'asc')  # 前端传递过来的,且模型类中有order, asc
       selected_ordering = self.request.GET.get('ordering', 'car_id_internal')  # 同理
       if self.order == "desc":
           selected_ordering = "-" + selected_ordering        

       return selected_ordering    

    def get_context_data(self, *args, **kwargs):
       context = super(CarList, self).get_context_data(*args, **kwargs)
       context['current_order'] = self.get_ordering()
       context['order'] = self.order        

       return context

也就是说get_ordering是sql查询排序,不能用来处理查询结果的内容

参考:https://stackoverflow.com/questions/39058384/django-reverse-ordering-with-listview


0
0

Jack

2019-06-21

get_queryset的结果,通过get_context_data函数传递到了上下文,上下文的名字可以通过context_object_name属性定义。

def get_ordering(self):
   """Return the field or fields to use for ordering the queryset."""
   return self.ordering

源码如上,get_ordering函数不需要传参,默认返回属性self.ordering 是元组

你要一个字段排序的话就是return (name,),多个字段就是return (name, created_time)


0
3
Jack
回复
李嘉图principal
直接self.get_queryset()
2019-06-22
共3条回复

Django高级实战 开发企业级问答网站

融合Django高级用法/算法/设计模式/TestCase测试/云计算打造项目

900 学习 · 756 问题

查看课程