Как использовать результаты аннотированного подзапроса в DJango - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть следующая модель:

class CollegeResult(models.Model):
   id = models.IntegerField(primary_key=True)
   college_code = models.CharField(max_length=255, blank=True, null=True)
   college_name = models.CharField(max_length=255, blank=True, null=True)
   branch_name = models.CharField(max_length=255, blank=True, null=True)
   cutoff_type = models.CharField(max_length=255, blank=True, null=True)
   stage_mark = models.IntegerField(blank=True, null=True)
   stage_rank = models.IntegerField(blank=True, null=True)

Я хочу перечислить строки с max (stage_mark) из группы кода_колледжа, филиала_имя.

Подходы, которые я пробовал:

  1. Необработанный запрос , но он уязвим для SQL-инъекций.
  2. query1 = CollegeResult.objects.filter(cutoff_type__in=quota) query2 = query1.values('college_code', 'branch_name') .annotate(stage_mark=Max('stage_mark'))
    Но я не знаю, как использовать результаты query2 для фильтрации результата query1.
  3. query1 = CollegeResult.objects.filter(cutoff_type__in=quota) query2 = query1.values('college_code','branch_name') .annotate(stage_mark=Max('stage_mark')) q_statement = Q() for college in query2: q_statement |= (Q(college_code=college['college_code']) & Q(branch_name=college['branch_name']) & Q(stage_mark=college['stage_mark']) ) query3 = query1.filter(q_statement)

    Это дает django.db.utils.OperationalError: слишком много переменных SQL

КакЯ должен подойти?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...