我的models.py在User
和Tag
之间有很多关系
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()
在t1
是Tag
实例的情况下工作。
此外,有没有更好的方法可以在不订购所有数据的情况下获得前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]