在 Django 中,我有一个 Checkout 模型,它是某人检查设备的票。我还有一个与 Checkout 模型相关的 OrganizationalUnit 模型(通过 ForeignKey),因为结账的人属于我们校园的一个 OrganizationalUnit。
OrganizationalUnit 有一个自我关系,所以几个 OU 可以是某个 OU 的孩子,而这些孩子可以有孩子,以此类推。这是模型,有些简化。
class OrganizationalUnit(models.Model):
name = models.CharField(max_length=100)
parent = models.ForeignKey(
'self',
blank=True, null=True,
related_name='children',
)
class Checkout(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
department = models.ForeignKey(
OrganizationalUnit,
null=True,
blank=True,
related_name='checkouts',
)
我想计算与某个 OrganizationalUnit 及其所有子级相关的 Checkouts。我知道如何获取与 OU 相关的所有结帐的计数。
ou = OrganizationalUnit.objects.get(pk=1)
count = ou.checkouts.all().count()
但是我如何让这个计数反映这个 OU 的孩子和他们的孩子的结帐?我是否使用某种迭代循环?
编辑:我想我仍然无法完全理解 while 命令来执行此操作。组织单元可以嵌套到用户想要嵌套的深度,但现在它在 DB 中的深度最多为 5 层。这是我写的……</p>
for kid in ou.children.all():
child_checkout_count += kid.checkouts.all().count()
for kid2 in kid.children.all():
child_checkout_count += kid2.checkouts.all().count()
for kid3 in kid2.children.all():
child_checkout_count += kid3.checkouts.all().count()
for kid4 in kid3.children.all():
child_checkout_count += kid4.checkouts.all().count()
for kid5 in kid4.children.all():
child_checkout_count += kid5.checkouts.all().count()
......这完全是废话。而且它需要一段时间才能运行,因为它几乎遍历了数据库的主要部分。帮助!(我今天似乎不能很好地思考。)