相关疑难解决方法(0)

Django计算RawQuerySet

Hay,我正在使用django 1.2,我想知道如何计算原始查询集(RawQuerySet)中的行.

传统的.count()方法不起作用.

继承人我的疑问

query = "SELECT *, ((ACOS(SIN(%s * PI() / 180) * SIN(lat * PI() / 180) + COS(%s * PI() / 180) * COS(lat * PI() / 180) * COS((%s - lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance FROM app_car WHERE price BETWEEN %s AND %s HAVING distance<=%s ORDER BY distance ASC"

cars = Car.objects.raw(query, [lat, lat, lon, min_price, max_price, miles])

return HttpResponse( cars )
Run Code Online (Sandbox Code Playgroud)

它的回归

Car_Deferred_model_id_user_id object
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python django count

19
推荐指数
3
解决办法
3万
查看次数

Django:获取对象列表的相关记录列表

我有两个与一对多相关的模型:

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


class Dog(models.Model):
    name      = models.CharField(max_length=255);
    owner     = models.ForeignKey('Person');
Run Code Online (Sandbox Code Playgroud)

我想输出一份人员名单,并在每个人的下方列出他所拥有的狗.这是我如何做到的:

在视图中:

persons = Person.objects.all()[0:100];
Run Code Online (Sandbox Code Playgroud)

在模板中:

{% for p in persons %}
    {{ p.name }} has dogs:<br />
    {% for d in persons.dog_set.all %}
        - {{ d.name }}<br />
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,Django将执行101个SQL查询,效率非常低.

我试图创建一个自定义管理器,它将获取所有人,然后所有的狗并在python中链接它们,但后来我不能使用paginator(我的另一个问题:Django:Paginator +原始SQL查询)它看起来很丑陋.

这样做有更优雅的方式吗?

UPDATE

解决方案基于@Daniel Roseman的博客条目

all_objects = Person.objects.select_related().all();

paginator = Paginator(all_objects, 100);

try:
    page = int(request.GET.get('page', '1'))
except ValueError:
    page = …
Run Code Online (Sandbox Code Playgroud)

django foreign-keys

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

在 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
查看次数