Gow*_*wri 3 python django django-models
嗨,我宣布了django模型如下,我只想运行简单的左联接与查询组。
SELECT u.name, COUNT('j.*') as num_jobs FROM `User` as u
LEFT JOIN Job as j ON u.id = j.userId_id GROUP BY j.userId_id
Run Code Online (Sandbox Code Playgroud)
上面的查询正在获取每个用户的作业计数。
from django.db import models
class Users(models.Model):
name = models.CharField(max_length=60,verbose_name="Name",null=True, blank=True)
email_id = models.CharField(max_length=60,verbose_name="Email Id",null=True, blank=True)
phonenumber = models.CharField(max_length=20, verbose_name="Phone Number")
class Meta:
verbose_name_plural = "Users"
verbose_name = "Users"
db_table = "User"
def __unicode__(self):
return str(self.phonenumber) + ": "+ str(self.name)
class Job(models.Model):
userId = models.ForeignKey(Users)
title = models.CharField(max_length=128,verbose_name="Title")
description = models.TextField(verbose_name="Description",null=True, blank=True)
class Meta:
verbose_name_plural = "Job"
verbose_name = "Job"
db_table = "Job"
def __unicode__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
我需要调整模型中的任何内容吗,请指导我!
尝试这个
from django.db.models import Count
# import your model (Job)
Job.objects.values('userId').annotate(c=Count('userId')).values('userId__name','c')
Run Code Online (Sandbox Code Playgroud)
首字母values('userId')后跟annotate将进行计数和分组userId。
输出将是这样的字典列表:
[{'userId__name':'John','c':20},]
Run Code Online (Sandbox Code Playgroud)
用户那里John有20个相关Job对象。
无关紧要的是,只要模型中有外键。通常最好写user而不是userId。
当您编写查询和访问关系(user__name而不是userId__name)时,这更有意义。
更新:
如果需要其他属性,可以将它们作为参数添加到第二个values调用中,如下所示:
Job.objects.values('userId').annotate(c=Count('userId'))\
.values('userId__name','userId__email_id','c')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1787 次 |
| 最近记录: |