我有一个名为User的Django模型,我想计算一下following对象中有多少项.

class User(AbstractUser):
    following = models.ManyToManyField("self", related_name="followers")

我试着用这行followers_num = User.following.count()来计算它们,但我收到了这个错误'ManyToManyDescriptor' object has no attribute 'count'.

我也try 了followers_num = User.objects.all().count(),但这返回了用户数.

有人知道怎么做吗?

推荐答案

您可以计算以下关系的总数:

User.following.through.objects.count()  # total number of following relations

如果要向数量为followings per UserUser个对象添加额外属性,可以使用:

from django.db.models import Count

User.objects.annotate(
    num_following=Count('following')  # number of following per (!) user
)

Note:ManyToManyField [Django-doc]本身默认为symmetrical,这意味着如果AB中的following,那么B自动是A中的following,您可能不希望这样.你可以用symmetrical=False [Django-doc]关掉它.

Django相关问答推荐

把Django测试和testcafe结合起来?

Django中每个类型/代理的最新行

未强制执行枚举值

在 Trunc 的 kind 属性中使用字段

如何在不编写每个视图中的逻辑的情况下呈现值,Django?

在 Django Rest Framework 视图中,request.user 是在请求​​到达视图之前进行数据库调用还是数据库调用发生?

Django基于类的视图上的success_url的反向抱怨循环导入

Django-Registration:邮箱作为用户名

Django REST Framework ModelSerializer get_or_create 功能

django 用一个提交按钮提交两种不同的表单

Django 模型将外键设置为另一个模型的字段

Django 从字段开始

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

为用户添加自定义权限

可以在 github 页面上托管 django 站点吗?

Matplotlib - Tcl_AsyncDelete:异步处理程序被错误的线程删除?

Django 自定义用户邮箱帐户验证

在 Django 开发服务器中关闭静态文件的缓存

Django - 指定 Django 管理员应该使用哪个模型管理器

从 git 存储库中删除并忽略所有具有扩展名的文件