django ORM return 多对多关系中的前 10 名匹配项

django ORM return top 10 match in manytomany relationship

我的 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: Cannot resolve keyword 'myuser_set' into field. Choices are: id, myuser, name

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

此外,有没有更好的方法在不对所有数据进行排序的情况下获得前 10 名?

下面查询 return 按用户数排序的标签列表:

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]