16.06.2009 13:45

  1. articles = Article.objects.filter(tags__in=[tag.id for tag in tags]).defer('content')


    Стоит добавить счётчик:
    articles = Article.objects.filter(tags__in=[tag.id for tag in tags]).defer('content').annotate(tags_count=Count('tags'))

    как получаю ошибку:
    IndexError at /articles/test/

    tuple index out of range

    Exception Type: IndexError
    Exception Value:

    tuple index out of range

    Exception Location: Z:\usr\local\python\Lib\site-packages\django\db\models\query.py in iterator, line 227

    ————————————————————————

    Z:\usr\local\python\Lib\site-packages\django\db\models\query.py in iterator

    220. obj = self.model(*row[index_start:aggregate_start])
    221.
    222. for i, k in enumerate(extra_select):
    223. setattr(obj, k, row[i])
    224.
    225. # Add the aggregates to the model
    226. for i, aggregate in enumerate(aggregate_select):

    227. setattr(obj, aggregate, row[i+aggregate_start]) ...

    228.
    229. yield obj
    230.
    231. def aggregate(self, *args, **kwargs):
    232. """
    233. Returns a dictionary containing the calculations (aggregation)


    То же, если использовать «.only()».

    Поискал информацию об ошибках «.defer»() или «.only()» совместно с «.annotate()» — не обнаружил вообще ничего.

    Сталкивался ли кто-нибудь?
    Нужна, лишь, пара полей для построения списка, не хочется тягать лишнее.
  2. Анонимно

    0 ↑
    0 ↓
    А если местами поменять defer и annotate? Не поможет?
  3. Нет, порядок на ошибку не влияет.
  4. У меня применение .defer() напару с .select_related() давало какой-то странный результат, что запрос выполнялся верный, но данные как-то шли не в те поля модели. До выяснения достаточного числа деталей и составления тесткейса, чтобы можно было выкатить багрепорт, увы, дело не дошло...

    Делаю на транке где-то двухнедельной давности TorrentUser.objects.filter(user=request.user).\ select_related('torrent').order_by('torrent__name').defer('torrent__torrent_data') и у меня значения полей в TorrentUser.torrent.* становятся полной чепухой. Убираю defer — все тут же нормализуется. Возможно это тот же баг, что-то с порядком-числом полей не то и у defer сейчас какие-то проблемы.

    Или это у меня кривые руки...

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.