【发布时间】:2019-04-01 21:46:28
【问题描述】:
在我的 django 应用中,有几种不同的方法可以获取相同模型的 QuerySet 对象。
我想使用一个函数来呈现数据——这一直很好,直到我决定添加 earliest 和 latest 时间来显示名列前茅。
这是我最近的尝试:
def render_list(request, objList):
latest = earliest = None
if objList:
latest = objList.latest('time').time
earliest = objList.earliest('time').time
context = {'objList': objList,
'earliest': earliest,
'latest': latest,
}
return render(request, 'list.html', context)
这会产生错误消息:
TypeError: Cannot reverse a query once a slice has been taken.
有没有办法解决这个问题?
更多详情:
render_list 函数被views.py 中的多个视图函数调用,例如:
def list_all(request):
objList = MyTable.objects.order_by('ip')
return render_list(request,objList)
def detail(request, ip, group):
objList = MyTable.objects
try:
item = MyTable.objects.get(ip=ip)
# display the details page...
except MyTable.DoesNotExist:
objList = MyTable.objects.complex_filter(...)
# more code
# ...
return render_list(request, objList)
以及urls.py中的对应行
path('list', views.list_all)
path('<group>/<ip>', views.detail)
【问题讨论】:
-
这里的
objList是什么?这看起来像一个视图函数(因为它的第一个参数被称为request并且它返回一个呈现的模板) - 你如何将看似复杂的对象(不是简单的字符串或数字)作为 URL 的一部分传递? -
这是一个被多个视图函数调用的函数
标签: python django django-models django-views django-queryset