django ORM在许多人的关系中重返前十名



我的models.py在UserTag之间有很多关系

class Tag(models.Model):
name = models.CharField(unique=True, max_length=32)
class User(AbstractBaseUser, PermissionsMixin):
tags = models.ManyToManyField(Tag, blank=True)    

如何获得按带有标签的用户数量排序的前10个标签?类似的东西

Tag.objects.order_by('user_set__count')[10]

这个命令不起作用,django抱怨

django.core.exceptions.FieldError:无法将关键字"myuser_set"解析到字段中。选项包括:id,myuser,name

这令人费解,因为t1.user_set.count()t1Tag实例的情况下工作。

此外,有没有更好的方法可以在不订购所有数据的情况下获得前10名?

以下查询返回按用户计数排序的标签列表:

tags = Tag.objects.all().annotate(num_user = Count('user')).order_by('-num_user')

如果您想要10个顶部,请使用以下查询:

tags = Tag.objects.all().annotate(num_user = Count('user')).order_by('-num_user')[:10]

相关内容

  • 没有找到相关文章

最新更新