3

我有三个主要模型:

Class Client(models.Model):
   stuff

Class Property(models.Model):
    client = models.ForeignKey(Client)
    branch = models.ForeignKey(Branch, blank=True, null=True)

Class Branch(models.Model):
    name = models.CharField(max_length=200)

我的最终目标基本上是尝试根据它所连接的属性来推断客户参与度最高的分支。

我确信最好的方法是使用 Django 的聚合使用 annotate,但我不确定如何做到这一点。我可能不得不extra改用。

我知道我需要类似的东西 Client.objects.annotate(branch_count=Count('property__branch')),但我需要以某种方式为附加到每个分支的属性添加过滤。

另一种方法也许是利用Collections.Counter

d = {}
for c in Client.objects.all():
    d[c] = Counter(c.property_set.values_list('branch', flat=True))

这将构建一个计数字典,然后我将使用它来查找任何一个客户端计数最高的分支。

4

1 回答 1

0

在属性模型中,给客户端一个相关名称属性(比如说“client_ref”)

Client.objects.annotate(branch_count=Count(
             'client_ref__branch')).filter(branch__name="some_name")
             .values('branch')

其中 name 可以替换为其他一些过滤器属性

于 2017-07-13T09:13:09.883 回答