Джанго аннотирует значения: как получить доступ к значениям? - PullRequest
0 голосов
/ 14 января 2010

У меня есть модель с "распродажами" и модель с "продавцом". Я хочу получить среднюю скидку каждого продавца. Вот что я пытаюсь:

sm = Disposal.objects.annotate(average_discount=Avg('discount')).values('average_discount','sm__fname','sm__lname').order_by('-discount')
    for s in sm:
         data[0] = data[0]+s.sm__fname+','+s.sm__lname+','+str(s.average_discount)

Теперь я получаю эту ошибку:

Объект утилизации не имеет атрибута sm__fname

Запрос выполняется нормально, когда я выполняю его в оболочке django - но как мне получить доступ к значениям? Большое спасибо!

1 Ответ

1 голос
/ 14 января 2010

Во-первых, как говорит документация , использование values дает вам список словарей , а не объектов модели. Таким образом, каждый s не имеет атрибута sm_whatever, он имеет ключ словаря. Итак, попробуйте это:

s['sm__lname']

Однако я должен сказать, что не вижу необходимости использовать values здесь вообще. Тебе было бы лучше получить только реальные объекты:

sm = Disposal.objects.annotate(average_discount=Avg('discount')).order_by('-discount')

и последующий доступ к соответствующим связанным объектам: s.fname.

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