我的问题很简单:我有 Users 拥有 Assets 或属于 Users 的 Assets 如果您愿意,我无法做到检索每个用户拥有的 Assets 的数量(计数)。我知道这对你们大多数人来说可能听起来很愚蠢,但我是 python/django(来自 PHP/MySQL)的新手,我不知道这里的工作原理。我不想使用原始 SQL - 如果没有其他方法,这将是我最后的选择。
(*) 我已经从代码中删除了所有不相关的原始数据
用户
class Users(models.Model):
firstname = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
Assets
class Assets(models.Model):
serial = models.CharField(unique=True, max_length=100)
user = models.ForeignKey('Users', blank=True, null=True)
# this is what I am playing with to retrieve the number of assets each user owns
@classmethod
def user_assets(self):
return Assets.objects.filter(user=user).count()
views.py
class UserList(ListView):
model = Users
def get_context_data(self, **kwargs):
context = super(UserList, self).get_context_data(**kwargs)
context['user_assets'] = self.model.user_assets()
return context
模板
{% for user in object_list %}
<tr>
<td>{{ user.id }}</td>
<td>
{{ user_assets }}
</td>
</tr>
{% endfor %}
我怎样才能得到这个号码?我已阅读有关聚合、注释和过滤器的内容,但无法真正理解。
编辑:
我正在寻找一种使用基于类的 View 且易于扩展的简单解决方案(我可能想稍后添加其他模型)
最佳答案
在您的 UserList
中,而不是使用模型,使用这个查询集:
from django.db.models import Count
class UserList(ListView):
queryset = Users.objects.annotate(num_assets=Count('assets'))
并像这样定义您的用户
字段:
user = models.ForeignKey('Users', blank=True, null=True, related_name='assets')
然后从模板:
{{ user.num_assets }}
另外请记住,最好使用单数模型名称,以避免与反向关系名称混淆。
关于python - 如何计算 Django 连接表中的对象数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512647/