django ORM return 多对多关系中的前 10 名匹配项
django ORM return top 10 match in manytomany relationship
我的 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: Cannot resolve keyword 'myuser_set' into field. Choices are: id, myuser, name
这令人费解,因为 t1.user_set.count()
在 t1
是 Tag
实例的情况下工作。
此外,有没有更好的方法在不对所有数据进行排序的情况下获得前 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]
我的 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: Cannot resolve keyword 'myuser_set' into field. Choices are: id, myuser, name
这令人费解,因为 t1.user_set.count()
在 t1
是 Tag
实例的情况下工作。
此外,有没有更好的方法在不对所有数据进行排序的情况下获得前 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]