Django分页和原始查询集
有没有办法用Django自带的分页功能来处理一个原始查询集(raw queryset)?我把它转换成列表的时候,结果报了个错……TypeError: 期望是字符串或Unicode对象,但找到了NoneType。这有什么解决办法吗?
3 个回答
-1
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当你按下一个按钮,程序就会做出反应。这种情况通常会用到“事件监听器”。
事件监听器就像是一个守卫,它一直在关注你程序中的某些事情,比如用户的点击、键盘输入等。当这些事情发生时,守卫就会立刻通知程序去执行相应的操作。
举个例子,如果你在网页上有一个“提交”按钮,事件监听器会监控这个按钮。当用户点击这个按钮时,事件监听器会捕捉到这个点击事件,然后触发程序去处理提交的内容。
总之,事件监听器帮助程序及时响应用户的操作,让程序变得更加互动和友好。
qs.filter(**pfilter).distinct().extra(select={'test': 'COALESCE(`psearch_program`.`eu_price`, 999999999)'}).extra(order_by=['test'])
5
你可以手动为你的 RawQuerySet 对象设置属性计数:
items = Item.objects.raw("select * from appitem_item")
def items_count():
cursor = connection.cursor()
cursor.execute("select count(*) from appitem_item")
row = cursor.fetchone()
return row[0]
items.count = items_count
给 @Rockallite
>>> class A():
... def b(self):
... print 'from b'
...
>>>
>>> (A()).b()
from b
>>> def c():
... print 'from c'
...
>>> a = A()
>>> a.b = c
>>> a.b()
from c
16
我用以下方法成功实现了这个功能:
paginator = Paginator(files, 12)
paginator._count = len(list(files))
在django.core.paginator.py中的代码:
- 检查是否设置了_count
- 如果没有,就尝试运行.count(),但这个方法并不存在
- 如果还是没有,就尝试用普通的len
在原始查询集上用len是行不通的,但把实际的分页器对象转换成列表在Django 1.3中对我来说是有效的。