Дабы не плодить новых тем, задам здесь вопрос, чем-то связан все же.
Вопрос такой - есть ли удобное штатное средство, чтобы при использовании аннотации и values подтягивались не цифры ключей, а значения, которые отдают модели из unicode(self) ?
sum_canvas = Order.objects.filter(o_type = '1', o_status='dbffc9').values('canvas', 'color').annotate(o_sum = Sum('full_price'), c_sum=Sum('cost'), o_count = Count('id')).order_by('canvas')
И вот крайне было бы полезным, чтобы sub_canvas[0] после этого выглядел как
{'color': '222', 'o_count': 1, 'canvas': 'Бельгия', 'c_sum': Decimal('21.25'), 'o_sum': Decimal('62.96')}
а не
{'color': 6L, 'o_count': 1, 'canvas': 1L, 'c_sum': Decimal('21.25'), 'o_sum': Decimal('62.96')}
Есть выход, конечно, колупать вложения так:
sum_canvas = Order.objects.filter(o_type = '1', o_status='dbffc9').values('canvas', 'color').annotate(o_sum = Sum('full_price'), c_sum=Sum('cost'), o_count = Count('id'), c_name = Min('canvas__prod__name')).order_by('canvas')
и на выходе получить
{'canvas': 1L, 'c_name': u'\u0411\u0435\u043b\u044c\u0433\u0438\u044f', 'o_sum': Decimal('62.96'), 'color': 6L, 'o_count': 1, 'c_sum': Decimal('21.25')}
Это не слишком удобно, потому что сама модель возвращает расширенную версию себя:
def __unicode__(self):
return u'Тип: %s (ширина %s) от %s' % (self.get_c_type_display(), self.c_width, self.prod)