2016-11-29 1 views
0

У меня есть запрос модели модели «A», в которой я пытаюсь выполнить некоторые вычисления/комментировать. Модель «A» имеет отношение ManyToMany к модели B. Из модели «A» я хотел бы иметь доступ к фильтруемому подмножеству моделей «B» на основе поля в «B». Как мне изменить мою модель «А», чтобы поддержать этот тип шаблона?запрос запроса фильтра, возвращаемый из ManyRelatedManager

пустышки пример:

class Publication(models.Model): 
    is_digital = models.BooleanField(default=True) 
    readership = models.IntegerField() 

class Article(models.Model): 
    language = models.CharField() 
    published_in = models.ManyToManyField(Publication) 

# returns a queryset of {publications: total readership} for the articles 
$ articles = Articles.objects.filter(language='en') 
$ articles.values('published_in').annotate(Sum('readership')) 

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

ответ

1

Подробнее о conditional aggregation.

from django.db.models import Sum, Case, When, IntegerField 

Article.objects.annotate(
    total_readership=Sum(
     Case(
      When(published_in__is_digital=True, then=1), 
      output_field=IntegerField() 
     ) 
    ) 
) 
Смежные вопросы