Django: использование значений() и get_FOO_display()?

Я пытаюсь улучшить существующий код, который первоначально занимал 3 минуты, чтобы подготовить большую таблицу данных (затем возвращенную Ajax). Старый код перебирал большой набор запросов, собирая информацию из множества связанных объектов. Из того, что я прочитал, и из мониторинга журнала SQL, итерация по наборам запросов, как правило, плохая идея, потому что SQL выполняется для каждого элемента. Вместо этого я использовал значения для сбора информации в одном операторе SQL, а затем перебирал его. Используя эту технику, я сократил время выполнения до 15 секунд (и это еще не все). Однако, поскольку я больше не использую объекты модели, я не могу использовать get_FOO_display(). Есть ли способ использовать эту функцию при использовании values()?

Упрощенно, оригинал был:

for user in users:
   data.append(user.get_name_display())  # Appends 'Joe Smith'
return data

И новый код:

for user in users.values('name'):
   data.append(user['name'])  # Appends 'JSmith001', which is incorrect
return data

Кроме того, если есть какой-то другой способ сохранить создание объектов модели, но при этом требуется только один оператор SQL на бэкэнде, я был бы рад знать об этом. Спасибо!

9
задан Nathan 12 March 2012 в 21:41
поделиться