您好,我如下声明了 Django 模型,我只想通过查询运行简单的左连接和组。
Mysql查询
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
上面的查询是获取每个用户的作业数。
Django 模型
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
我需要在模型中调整什么吗,请指导我!
最佳答案
试试这个
from django.db.models import Count
# import your model (Job)
Job.objects.values('userId').annotate(c=Count('userId')).values('userId__name','c')
初始 values('userId')
后跟 annotate
将按 userId
计数和分组。
输出将是一个像这样的字典列表:
[{'userId__name':'John','c':20},]
用户 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')
关于python - 如何通过 Django 模型查询创建与组的左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28893716/