如何在 Django 中使用“*.objects.values()”

How to use "*.objects.values()" in Django

我有一个 table 名称“Like”和名为“value”的列。它包含两个值,“Like”或“Unlike”。如何使用 Like.objects.values() 获取仅包含“Like”的列值。我试过了,

query = Like.objects.values({'value': 'Like'}).order_by().annotate(Count('value'))

正在投掷,

AttributeError: 'dict' object has no attribute 'split'

objective是按降序获取点赞数。如果我使用 object.values() 得到它,我可以做类似下面的事情来排序,

sorted_dec = sorted(query, key=lambda x:x['value'], reverse=True)[0:5]

或者有更好的逻辑来解决这个问题吗?

models.py:

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = RichTextField(blank=False, null=True, validators=[MinLengthValidator(200)])
    liked = models.ManyToManyField(User, default=None, blank=True, related_name = 'liked')
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name = 'author')

    def __str__(self):
        return self.title

    @property
    def num_likes(self):
        return self.liked.all().count()

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})

LIKE_CHOICES = (

('Like', 'Like'),
('Unlike', 'Unlike'),

)

class Like(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    value = models.CharField(choices= LIKE_CHOICES,default='Like', max_length=10)


    def __str__(self):
        return str(self.post)
        

以下查询将为您提供包含字典的查询集。

query = Like.objects.filter(value='Like').values()