QuerySet.values('field_name')仅返回ID

时间:2018-12-27 11:14:23

标签: django django-queryset

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

0 个答案:

没有答案