Как сделать этот запрос, используя Django orm? - PullRequest
1 голос
/ 18 мая 2019

У меня есть модель Profile и модель Complain, обе они подключены к встроенной пользовательской модели. Я должен выполнить запрос, используя обе модели, в которых модель 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")

1 Ответ

0 голосов
/ 18 мая 2019

Я хочу подсчитать, сколько жалоб на конкретное место жительства вы можете написать:

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'))
...