Задать вопрос

Как правильно сделать выборку через ORM django?

Есть 2 таблицы, нужно получить сумму чисел из второй таблицы, по выборке из первой.
class Element(models.Model):
    contest = models.ForeignKey(Contest, blank=True, null=True)
    title = models.CharField(max_length=255)
    description = models.TextField(blank=True)
    weight = models.IntegerField(_('Weight'), blank=True, default=1)

class Data(models.Model):
    useractive = models.ForeignKey(UserActiv)
    element = models.ForeignKey(Element, blank=True, null=True)
    date_review = models.DateTimeField(_("Date Review"), auto_now_add=True)
    url_page = models.CharField(max_length=255)
    showing = models.IntegerField(_('Showing'), blank=True, default=0)


Вот написал запрос:
Element.objects.filter(
  id__in = Data.objects.filter(
    showing = 2,
    useractive = user.id
  ).values_list('element')
).aggregate(sum_weight = Sum('weight'))


Получаю:
{'sum_weight': 3}

То есть по факту получаем 2 элемента, так как id__in получается что входит всего в 2 элемента:
[<Element: 2>, <Element: 1>]

А нужно чтобы не вхождения, то есть всего как бы 2 вхождения, а все элементы вывело
[<Element: 2>,<Element: 2>, <Element: 1>, <Element: 1>, <Element: 1>, <Element: 1>]

И поучить:
{'sum_weight': 8}
  • Вопрос задан
  • 276 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
winordie
@winordie
Лучшая документация -- исходники
Element.objects.filter(data__showing=2, data__useractive=user.id).aggregate(sum_weight=Sum('weight'))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы