django 分页和 RawQuerySet

发布于 2024-10-19 20:22:03 字数 123 浏览 3 评论 0原文

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

is there a way to paginate a rawqueryset using django's inbuilt pagination?
when i cast it to a list , it throws an error in my face ...TypeError: expected string or Unicode object, NoneType found. Is there a way around this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我乃一代侩神 2024-10-26 20:22:03

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

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

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

  • 检查 _count 是否设置,
  • 如果没有,则尝试运行 .count() ,
  • 如果没有,则不存在,然后尝试在 a 上使用普通 len

len raw_queryset 不起作用,但将实际的分页器对象转换为列表可以在 Django 1.3 中为我找到

I managed to achieve it using the following:

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

The code in django.core.paginator.py:

  • checks for whether _count is set
  • if not then tries to run .count() which doesn't exist
  • if not then tries plain len

len on a raw_queryset doesn't work but converting the actual paginator object to a list works find for me in Django 1.3

说不完的你爱 2024-10-26 20:22:03

您可以为 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

You can set the attribute count manually for your RawQuerySet object:

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

for @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
猫卆 2024-10-26 20:22:03
qs.filter(**pfilter).distinct().extra(select={'test': 'COALESCE(`psearch_program`.`eu_price`, 999999999)'}).extra(order_by=['test'])
qs.filter(**pfilter).distinct().extra(select={'test': 'COALESCE(`psearch_program`.`eu_price`, 999999999)'}).extra(order_by=['test'])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文