如何使用 Django orm 执行此查询?

How to do this query using Django orm?

我有一个 Profile 模型和 Complain 模型都连接到内置用户 model.I 必须使用 Profile 模型所在的两者进行查询。我想统计一个特定住所提出的投诉数量。我可以使用 SQL 来完成,但我不知道如何使用 Django 来完成。

SELECT users_profile.residence,count(user_id)from users_profile INNER JOIN chp_complain on(users_profile.user_id = chp_complain.complain_user_id)GROUP BY(user_id)

投诉模特:-

class Complain(models.Model):

    complain_user = models.ForeignKey(User, on_delete=models.CASCADE)
    complain_department=models.CharField(max_length=100)
    complain_subject = models.CharField(max_length = 100,help_text =  "Enter the complain subject")
    department_head=models.CharField(max_length=100)
    recepient=models.CharField(max_length=100)
    complain_description=models.TextField(max_length=2000)
    date_posted = models.DateTimeField(default = timezone.now)
    NOT_VISITED = 'NV'
    VISITED = 'V'
    INPROCESS = 'IP'
    COMPLETED = 'C'
    status = (
        (NOT_VISITED, 'NV'),
        (VISITED, 'V'),
        (INPROCESS, 'IP'),
        (COMPLETED, 'C'),)
    status=models.CharField(max_length=2,choices=status,)

个人资料模型:-

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    UID =models.CharField(max_length=30,default = "000",help_text = "'Staff's fill their STAFF ID and student's fill their ROLL NO " )
    MALE = 'M'
    FEMALE = 'F'
    Gender=((MALE, 'Male'),(FEMALE, 'Female'),)
    Gender=models.CharField(max_length=6,choices=Gender,default=MALE,)
    FIRST = '1st'
    SECOND = '2nd'
    THIRD = '3rd'
    FOURTH = '4th'
    NGH = 'NGH'
    NON_HOSTELER = 'Non_hosteler'
    TEACHER_QUARTER = 'Teacher_quarter'
    residence = ((FIRST, 'First'),(SECOND, 'Second'),(THIRD, 'Third'),(FOURTH, 'Fourth'),(NGH,'NGH'),(NON_HOSTELER, 'Non_hosteler'),(TEACHER_QUARTER,'Teacher_quarter'))
    residence = models.CharField(max_length=20,choices=residence,default=FIRST,)
    room_no=models.CharField(max_length=10,default = "000")

我想统计一下,您可以写下来自特定住所的投诉数量:

Complain.objects.values('complain_user__profile__residence').annotate(complains_count=Count('id'))

在您的 SQL 查询中:

SELECT users_profile.residence,count(user_id)from users_profile INNER JOIN chp_complain on(users_profile.user_id = chp_complain.complain_user_id)GROUP BY(user_id)

您计算有多少用户从特定住所提出投诉。可以这样计算:

User.objects.values('profile__residence').annotate(Count('id'))