2016-02-24 1 views
7

Я задаю этот вопрос еще раз (it was asked back in 2009),Как совместить select_related() и value()? (2016)

Мы знаем, что есть values() метод QuerySet, когда есть ForeignKey (автор, к примеру), то результат, как:

[{ 'author_id':3, ... }, ...] 

Я хочу, чтобы результат как:

[{ 'author':{'name':'dave',...}, ... }, ...] 

имеет что-то чан в новых версиях Django?

Я хочу преобразовать запрос в комбинацию списков и dictionnaries, возможно ли это?

Затем я возьму этот объект и поместит его в более крупный объект, чтобы сериализовать его. Именно по этой причине я не хочу сериализовать его сразу.

ответ

5

Вы можете получить доступ связанных полей через values() без необходимости использования select_related() (только они будут выбраны без последующего поиска):

MyModel.objects.values('author__id', 'author__name') 

Это возвращает следующую структуру:

[{'author__id': 1, 'author__name': 'Dave'}, {...}] 

Если вам нужно это во вложенной структуре, которую вам придется преобразовать впоследствии.

Обратите внимание, что для отношений M2M это возвращает одну запись в отношении M2M, поэтому, вероятно, это не будет желаемый эффект. Но для отношений OneToOne/ForeignKey это работает отлично.

Смежные вопросы