Django ORM SELECT与联接sql
我试图通过与django ORM进行连接来获取数据。 但有一个问题如下 django车型:Django ORM SELECT与联接sql,django,django-admin,Django,Django Admin,我试图通过与django ORM进行连接来获取数据。 但有一个问题如下 django车型: 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_dat
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'
我需要从数据库中选择
stats_data_test = LawyerCounsel.objects.filter(register_date=yearmonth).order_by("cnt")
我可以用django ORM进行选择吗?(例如,在SQL中,select如下所示)
是的,你能做到。您需要使用Django QuerySet功能将这些select子查询注释到您的模型上
在将该值注释到QuerySet之后,
.order\u by
将可以访问该值。您可能可以使用django的“注释”功能,但我很难理解您的查询在做什么。您能提供一个示例输出并加以描述吗?律师1 2017-09-04 13 0 6 7 0 0 0律师2 2017-09-04 0 0 0 0 0 0 0 0 0 0律师3 2017-09-11 0 0 0 0 0 0 0 0 0 0 0按律师在计数器回答表中显示回答计数。cnt是本月的病例数,cnt1是第一周。。。。
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;