我有以下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
的全部对象!?
答案 0 :(得分:0)
要从FK获取消息值:annotate(message=F(stats_model_field + '__message'))
要获取对象,请尝试在select_related
之后访问原始字段名,例如objects[1].first_message
但是在.values('messages')
之后,您将仅获得带注释的message
字段值,仅此而已。没有对象,只有包含单个键值{'message': 'asdf'}
的字典。