2015-05-18 2 views
0

Я хотел бы аннотировать QuerySet, основанный на внешнем ключе, т.е.Джанго макс на основе внешнего ключа QuerySet

class A(models.Model): 
    name = models.CharField(max_length=200) 

class B(models.Model): 
    value = models.IntegerField() 
    a = models.ForeignKey(A) 

Я хотел бы аннотировать B QuerySet с Max, но каждый Max фильтруется в a внешний ключ.

У меня возникло ощущение, что мне придется отфильтровать внешний ключ, который я хотел, а затем аннотировать.

qs = B.objects.filter(a=some_specific_instance_of_A).annotate(max_value=Max('value')) 

Но хотел бы сделать что-то вроде

qs = B.objects.annotate(max_value=Max('value'), key='a') 

ответ

1

Используйте пункт values группе до аннотирования.

qs = B.objects.values('a').annotate(max_value=Max('value'))