首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django ORM SELECT with join sql

Django ORM SELECT with join sql
EN

Stack Overflow用户
提问于 2019-03-22 09:44:21
回答 1查看 81关注 0票数 0

我正在尝试通过与django ORM进行连接来获取数据。但是有一个问题,如下所示。

django中的模型:

代码语言:javascript
运行
复制
class LawyerCounsel(models.Model):
    lawyer_idx = models.AutoField(primary_key=True)
    lawyer_name = models.CharField(max_length=50)
    lawyer_status = models.CharField(max_length=1)
    register_date = models.DateTimeField()
    lawyeridx = models.ForeignKey(CounselAnswer, to_field='lawyer_idx',
unique='true', db_column="counsel_answer_idx", on_delete="models.DO_NOTHING")

        class Meta:
            managed = False
            db_table = 'lawyer'


class CounselAnswer(models.Model):
    counsel_answer_idx = models.AutoField(primary_key=True)
    counsel_idx = models.IntegerField()
    lawyer_idx = models.IntegerField()
    counsel_answer_title = models.CharField(max_length=255)
    counsel_answer_contents = models.TextField()
    counsel_seleted = models.CharField(max_length=1)
    counsel_answer_agree = models.IntegerField()
    lawyer_ip = models.CharField(max_length=20, blank=True, null=True)
    counsel_answer_delay_time = models.IntegerField()
    register_date = models.DateTimeField()
    update_date = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'counsel_answer'

我需要从数据库中选择

代码语言:javascript
运行
复制
stats_data_test = LawyerCounsel.objects.filter(register_date=yearmonth).order_by("cnt")

我可以使用django ORM进行此选择吗?(例如,在SQL中,select如下所示)

代码语言:javascript
运行
复制
select * from (
            select 
                y.lawyer_name,
                DATE_FORMAT(y.register_date, '%Y-%m-%d') as reg_date,
                (select count(counsel_answer_idx) from counsel_answer where lawyer_idx = y.lawyer_idx and DATE_FORMAT(register_date, "%Y%m") = '201903') as cnt,
                (select count(counsel_answer_idx) from counsel_answer where lawyer_idx = y.lawyer_idx and DATE_FORMAT(register_date, "%Y%m") = '201903' and week(register_date,5) - week(DATE_SUB(register_date,INTERVAL DAYOFMONTH(register_date)-1 DAY),5) = 1) as cnt1,
                (select count(counsel_answer_idx) from counsel_answer where lawyer_idx = y.lawyer_idx and DATE_FORMAT(register_date, "%Y%m") = '201903' and week(register_date,5) - week(DATE_SUB(register_date,INTERVAL DAYOFMONTH(register_date)-1 DAY),5) = 2) as cnt2,
                (select count(counsel_answer_idx) from counsel_answer where lawyer_idx = y.lawyer_idx and DATE_FORMAT(register_date, "%Y%m") = '201903' and week(register_date,5) - week(DATE_SUB(register_date,INTERVAL DAYOFMONTH(register_date)-1 DAY),5) = 3) as cnt3,
                (select count(counsel_answer_idx) from counsel_answer where lawyer_idx = y.lawyer_idx and DATE_FORMAT(register_date, "%Y%m") = '201903' and week(register_date,5) - week(DATE_SUB(register_date,INTERVAL DAYOFMONTH(register_date)-1 DAY),5) = 4) as cnt4,
                (select count(counsel_answer_idx) from counsel_answer where lawyer_idx = y.lawyer_idx and DATE_FORMAT(register_date, "%Y%m") = '201903' and week(register_date,5) - week(DATE_SUB(register_date,INTERVAL DAYOFMONTH(register_date)-1 DAY),5) = 5) as cnt5,
                (select count(counsel_answer_idx) from counsel_answer where lawyer_idx = y.lawyer_idx and DATE_FORMAT(register_date, "%Y%m") = '201903' and week(register_date,5) - week(DATE_SUB(register_date,INTERVAL DAYOFMONTH(register_date)-1 DAY),5) = 6) as cnt6
            from lawyer y
        where y.lawyer_status = 'N'
        ) A order by A.cnt desc;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-22 14:51:24

是的,你可以做到这一点。您需要使用Django QuerySet .annotate功能将这些select子查询注释到您的模型上。

在将该值注释到QuerySet上之后,.order_by就可以访问它了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55291710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档