我有一个名为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')
为什么没有达到预期的结果?