老师想问下 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_orderingreturn 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.orderreturn context
也就是说get_ordering是sql查询排序,不能用来处理查询结果的内容
参考:https://stackoverflow.com/questions/39058384/django-reverse-ordering-with-listview
00 -
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)
032019-06-22
相似问题