django分页和RawQuerySet

时间:2011-03-01 10:03:36

标签: python django django-pagination

有没有办法使用django的内置分页对rawqueryset进行分页? 当我把它投射到列表时,它会在我的脸上抛出一个错误... TypeError:期望的字符串或Unicode对象,找到NoneType。有办法解决这个问题吗?

3 个答案:

答案 0 :(得分:15)

我设法使用以下方法实现它:

paginator = Paginator(files, 12)
paginator._count = len(list(files))

django.core.paginator.py中的代码:

  • 检查_count是否已设置
  • 如果没有,则尝试运行不存在的.count()
  • 如果没有则尝试普通len

在raw_queryset上的len不起作用但是将实际的paginator对象转换为列表可以在Django 1.3中找到我的工具

答案 1 :(得分: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

答案 2 :(得分:-1)

qs.filter(**pfilter).distinct().extra(select={'test': 'COALESCE(`psearch_program`.`eu_price`, 999999999)'}).extra(order_by=['test'])