python - 如何通过 Django 模型查询创建与组的左连接

标签 python django django-models

您好,我如下声明了 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/

相关文章:

php - 从 Google Drive 中的 Txt、PDF、Doc 文件中提取电子邮件地址

python - 非法指令(核心转储)tensorflow

Django DRF,如何使用 DRF 操作正确注册自定义 URL 模式

python - Django Rest Framework - 如何调用方法模型

python - 使用 Django 的 ORM 的模型继承方法

python - 如何在 tabula-py 中设置页面范围?

Django allauth : how would you create a typical/accounts/settings page while leveraging what allauth already gives us?

django - ValueError : Related model u'app. 模型'无法解析

python - Django 外键的模型字段未正确更新

python - Pandas 为一列分配不同的值取决于另一列中的值