我有以下模型:
class Story(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=255)
description = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='stories')
likes = GenericRelation(Like)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Like只是使用Django的内容类型框架的简单模型:
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.CharField(max_length=36)
target = GenericForeignKey('content_type', 'object_id')
我想做的就是按最喜欢的顺序订购我的故事,但我无法这样做。我已经尝试了以下方法,但无济于事:
stories = Story.objects.annotate(count=Count('likes')).order_by('-count')
这是我的输出:
>>> Story.objects.values('id').annotate(count=Count('likes')).order_by('-count')[:5]
<QuerySet [{'id': UUID('00feaa91-28b7-46c9-8755-7368408f195e'), 'count': 0}, {'id': UUID('02b8167c-19c2-41f8-819b-d0043ea03a65'), 'count': 0}, {'id': UUID('042215b0-69be-402e-9f31-8097f3a0c1c6'), 'count': 0}, {'id': UUID('0a3cb717-54e0-49d7-b0f0-e19cffb28df9'), 'count': 0}, {'id': UUID('0b4230f9-67e7-4cc1-a8bd-8b5c3c8b0917'), 'count': 0}]>
>>>
这很奇怪,因为我有喜欢的故事...
这是什么古怪的东西?
>>> Story.objects.aggregate(Count('likes'))
{'likes__count': 0}
>>>
但是我知道有些故事喜欢:
>>> Like.objects.count()
9
到目前为止,我只喜欢故事。
有一种简单的方法吗?
答案 0 :(得分:1)