Поле переименования Django возвращает только int id, а не object - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующие поля модели Django:

first_message = model.ForeignKey(FirstMessage)
second_message = model.ForeignKey(SecondMessage)

, тогда как в БД будет заполнено только одно из них, но не оба одновременно.

Теперь у меня есть следующее условие фильтра:

# state_model_field can be either 'first_message' or 'second_message'
field_filter = {f'{stats_model_field}__isnull': False}

objects = (MessageStats.objects
                       .filter(**field_filter)
                       .prefetch_related(stats_model_field)
                       .annotate(message=F(stats_model_field))
                       .values('message')
                       .order_by('message'))

Поле объектов должно содержать все MessageStats с объединенной таблицей FirstMessage или SecondMessage.Чтобы не делать различий между полями в будущем, я хочу переименовать любое поле state_model_field в псевдоним message (с аннотацией).

Однако результаты возвращаются какdict

{'message': 1}

но я хочу полный объект увядания FirstMessage или SecondMessage!?

1 Ответ

0 голосов
/ 29 ноября 2018

Чтобы получить значение сообщения из FK: annotate(message=F(stats_model_field + '__message'))

Чтобы получить объект, попробуйте получить доступ к исходному имени поля после select_related, например, objects[1].first_message

Но после .values('messages') вы будетеполучить только аннотированные message значения полей, вот и все.Нет объектов, только диктовки, содержащие одно значение ключа {'message': 'asdf'}.

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