代码之家  ›  专栏  ›  技术社区  ›  nos

django orm返回manytomany关系中的前10名

  •  0
  • nos  · 技术社区  · 6 年前

    我的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 是一个 标签 实例。

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ali    6 年前

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

    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]