У меня есть следующая модель:
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) из группы кода_колледжа, филиала_имя.
Подходы, которые я пробовал:
- Необработанный запрос , но он уязвим для SQL-инъекций.
query1 = CollegeResult.objects.filter(cutoff_type__in=quota)
query2 = query1.values('college_code', 'branch_name')
.annotate(stage_mark=Max('stage_mark'))
Но я не знаю, как использовать результаты query2 для фильтрации результата query1. 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
КакЯ должен подойти?