相关疑难解决方法(0)

Django:Paginator +原始SQL查询

我在我的网站上到处都使用Django Paginator,甚至还写了一个特殊的模板标签,以使它更方便.但现在我进入了一个状态,我需要在其中创建一个复杂的自定义原始SQL查询,没有LIMIT将返回大约100K记录.

如何在自定义查询中使用Django Pagintor?

我的问题的简化示例:

我的模特:

class PersonManager(models.Manager):

    def complicated_list(self):

        from django.db import connection

        #Real query is much more complex        
        cursor.execute("""SELECT * FROM `myapp_person`""");  

        result_list = []

        for row in cursor.fetchall():
            result_list.append(row[0]); 

        return result_list


class Person(models.Model):
    name      = models.CharField(max_length=255);
    surname   = models.CharField(max_length=255);     
    age       = models.IntegerField(); 

    objects   = PersonManager();
Run Code Online (Sandbox Code Playgroud)

我在Django ORM中使用pagintation的方式:

all_objects = Person.objects.all();

paginator = Paginator(all_objects, 10);

try:
    page = int(request.GET.get('page', '1'))
except ValueError:
    page = 1

try:
    persons = paginator.page(page)
except (EmptyPage, InvalidPage):
    persons = paginator.page(paginator.num_pages)
Run Code Online (Sandbox Code Playgroud)

这样,Django变得非常聪明,并 …

python sql django pagination

11
推荐指数
2
解决办法
6606
查看次数

在 Django REST ListAPI 视图中对原始 SQL 查询进行分页的最佳方法?

我有一个原始 SQL 查询,用于为 Django REST ListAPI 视图构建查询集。它大致如下(请原谅无意义的名称):

class MyView(ListAPIView):
    serializer_class = MySerializer
    paginate_by = 10
    def get_queryset(self):
        params = {
            "uid": str(self.request.user.id),
            "param": str(self.kwargs['param'])
        }
        query = 'SELECT f.id ' \
            'FROM myapp_foo f, myapp_bar b ' \
            'WHERE b.foo_id = f.id AND ' \
            'b.param >= %(param)s AND ' \
            'f.dt_tm >= NOW() AND ' \
            '(SELECT COUNT(*) FROM myapp_baz z ' \
            'WHERE z.user_id = %(uid)s AND ' \
            'z.qux_id = f.qux_id) = 0 ' \
            'ORDER BY …
Run Code Online (Sandbox Code Playgroud)

python sql django pagination django-rest-framework

1
推荐指数
1
解决办法
5415
查看次数

标签 统计

django ×2

pagination ×2

python ×2

sql ×2

django-rest-framework ×1