【发布时间】:2014-02-26 01:41:48
【问题描述】:
我的问题很简单:我有 Users 拥有 Assets 或 Assets 属于 Users 如果您愿意,但我无法做到检索每个 User 拥有的 Assets 的数量(计数)。我知道这对你们大多数人来说可能听起来很傻,但我是 python/django 的新手(来自 PHP/MySQL),我不知道这里的工作原理。我不想接触原始 SQL - 如果没有其他方法,这将是我的最后选择。
(*) 我已经从代码中删除了所有不相关的原始数据
用户
class Users(models.Model):
firstname = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
资产
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 %}
我怎样才能得到那个号码?我已阅读有关聚合、注释和过滤器的信息,但无法真正理解。
编辑:
我正在寻找一个简单的解决方案,通过使用基于类的视图并且易于扩展(我以后可能想添加其他模型)
【问题讨论】:
-
您需要使用 sql 连接,如果您不想乱用原始 sql,您可以尝试 django 的 select_related() 然后 count(),但您需要外键才能工作。
-
我有一个从资产到用户的外键。许多资产属于一个用户,但两个用户不能拥有相同的资产。
-
是的,你是对的,没有注意到,尝试选择相关也许它会做。
-
它没有。我试过“return cls.objects.select_related(None).count()”和“return cls.objects.select_related('assets').count()”,我总是得到全部资产。
-
开头的 cls 是什么?您需要类似:
Assets.objects.prefetch_related('Users').filter(user=user).count()