django - QuerySet.values('field_name') 只返回 id
问题描述
我有一个名为的模型Comment
,它有另一个模型Post
作为外键。它还与用户模型有多对多的关系。
In [136]: user = User.get(pk=1)
In [137]: all_comments = Comment.objects.all()
In [138]: seen_comments = user.seen_comments.all()
In [139]: unseen_comments = all_comments.difference(seen_comments)
这是查询集的结构:
In [140]: all_comments
Out[140]: <QuerySet [<Comment: Test comment>, <Comment: Test comment 2>, <Comment: Test comment 3>]>
In [141]: all_comments.values()
Out[141]: <QuerySet [{'id': 17, 'post_id': 44, 'text': 'Test comment', 'created_date': datetime.datetime(2018, 12, 18, 7, 0, tzinfo=<UTC>), 'user_id': 1}, {'id': 19, 'post_id': 44, 'text': 'Test comment 2', 'created_date': datetime.datetime(2018, 12, 19, 9, 0, tzinfo=<UTC>), 'user_id': 20}, {'id': 20, 'post_id': 44, 'text': 'Test comment 3', 'created_date': datetime.datetime(2018, 12, 27, 8, 12, 27, 338467, tzinfo=<UTC>), 'user_id': 1}]>
unseen_comments 是 Comment 对象的 QuerySet。
In [142]: unseen_comments
Out[142]: <QuerySet [<Comment: Test comment>, <Comment: Test comment 3>]>
In [143]: unseen_comments.values()
Out[143]: <QuerySet [{'id': 17, 'post_id': 44, 'text': 'Test comment', 'created_date': datetime.datetime(2018, 12, 18, 7, 0, tzinfo=<UTC>), 'user_id': 1}, {'id': 20, 'post_id': 44, 'text': 'Test comment 2', 'created_date': datetime.datetime(2018, 12, 27, 8, 12, 27, 338467, tzinfo=<UTC>), 'user_id': 1}]>
现在,如果我尝试获取所有看不见的帖子的 id,我会得到:
In [144]: unseen_comments.values('post_id')
Out[144]: <QuerySet [{'post_id': 17}, {'post_id': 20}]>
这是错误的。我预计它在这两种情况下都会返回 44。
同样,如果我尝试获取我得到的每条评论的文本:
In [145]: unseen_comments.values('text')
Out[145]: <QuerySet [{'text': 17}, {'text': 20}]>
如果我做同样的事情,但使用原始评论 QuerySet 我会得到预期的结果。
In [146]: all_comments.values('post_id')
Out[146]: <QuerySet [{'post_id': 44}, {'post_id': 44}, {'post_id': 44}]>
我的问题是,为什么没有unseen_comments.values('post_id')
预期的结果?
解决方案
推荐阅读
- python-3.x - 矩形是否重叠、不重叠或相同?
- python-3.x - 使用 asyncio 的高级请求和类
- jquery - div重新加载后重新关联点击事件
- javascript - 为什么函数 A 工作而函数 B 抛出错误?
- c# - 如何修复由于继承而丢失的变量?
- python - 从 Scrapy 日志中删除忽略响应消息
- html - 里面的 HTML 文本没有出现
- javascript - Service Worker 有什么方法可以在每次网站更新时删除设备上的缓存?
- javascript - 如何使用 Babel 将 ES5 转换为 ES6
- angular - 如何使用 ngFor 在 Angular 中正确构建无序列表