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