12

有没有办法使用 django 的内置分页对 rawqueryset 进行分页?当我将它转换为列表时,它会在我的脸上抛出一个错误 ...TypeError: expected string or Unicode object, NoneType found。有没有解决的办法?

4

3 回答 3

16

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

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

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

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

raw_queryset 上的 len 不起作用,但是在 Django 1.3 中将实际的分页器对象转换为列表对我有用

于 2011-03-28T21:57:27.927 回答
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
于 2012-03-14T06:53:49.460 回答
-1
qs.filter(**pfilter).distinct().extra(select={'test': 'COALESCE(`psearch_program`.`eu_price`, 999999999)'}).extra(order_by=['test'])
于 2014-05-26T15:56:30.207 回答