Django重命名字段仅返回int id而不是对象

时间:2018-11-29 12:30:59

标签: python django filter

我有以下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和连接的FirstMessageSecondMessage表。为了将来不必区分这些字段,我想将state_model_field的哪个字段重命名为别名message(带有注释)。

但是,结果以dict的形式返回

{'message': 1}

但是我想要凋零FirstMessageSecondMessage的全部对象!?

1 个答案:

答案 0 :(得分:0)

要从FK获取消息值:annotate(message=F(stats_model_field + '__message'))

要获取对象,请尝试在select_related之后访问原始字段名,例如objects[1].first_message

但是在.values('messages')之后,您将仅获得带注释的message字段值,仅此而已。没有对象,只有包含单个键值{'message': 'asdf'}的字典。