Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何执行从原始SQL到django queryset的转换_Sql_Django_Django Queryset - Fatal编程技术网

如何执行从原始SQL到django queryset的转换

如何执行从原始SQL到django queryset的转换,sql,django,django-queryset,Sql,Django,Django Queryset,我正在努力转换为具有原始sql的django查询 我是django的新手,任何帮助都将不胜感激 有一些简单的模型: 酿酒师-目标模型 酒 职位 酿酒师拥有1+种葡萄酒 Wine有1+个帖子 我知道应该用注释来完成,但不知道如何实现它 select w2.*, (select count(wp.id) from web_winemaker www inner join web_wine ww on www.id = ww.winema

我正在努力转换为具有原始sql的django查询 我是django的新手,任何帮助都将不胜感激

有一些简单的模型:

酿酒师-目标模型

职位

酿酒师拥有1+种葡萄酒

Wine有1+个帖子

我知道应该用注释来完成,但不知道如何实现它

select w2.*,
       (select count(wp.id)
        from web_winemaker www
                 inner join web_wine ww on www.id = ww.winemaker_id
                 inner join web_post wp on ww.id = wp.wine_id
           where
                ww.status=20
            and
                 wp.status=20
            and
                 www.id = w2.id
       ) as wineposts_count,
       (
           select count(w.id)
           from web_winemaker www1
           inner join web_wine w on www1.id = w.winemaker_id
           where
                w.status=20
           and www1.id = w2.id
        ) as wines_count
from web_winemaker w2;

您应该能够通过注释函数中的表达式实现这一点。我猜了一下您的关系字段中的
相关的\u name
值,因此下面的代码可能不会直接插入,但应该可以让您了解如何执行所需操作

from django.db.models import Count, Q

wine_makers = Winemaker.objects.annotate(
    posts_count=Count(
        'wine__post__id',
        filter=Q(wines__status=20, wines__posts__status=20),
    ),
    wines_count=Count(
        'wines__id',
        filter=Q(wines__status=20),
    ),
)

您可能需要提供
distinct=True
,这取决于您是否正在跨越关系。

您是否可以将您的模型添加到您的问题中,并在可能的情况下用示例描述所需的输出!所以,反应迅速且非常合适的答案,是的,相关的名称是
wines
posts