QuerySet.values ​​('field_name') возвращает только идентификатор - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть модель с именем 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)

Вот структура QuerySets:

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 - это объект QuerySet of Comment.

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}]>

Теперь, если я попытаюсьполучить идентификатор всех сообщений, которые не видны, я получаю это:

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') не дает ожидаемого результата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...