【问题标题】:Django group objects by foreign key and countDjango按外键和计数分组对象
【发布时间】:2015-08-09 16:26:45
【问题描述】:

我在我的数据库中存储了一个 Url 表,其结构如下:

[条目 1]

Url: ForeignKey(Url)
Referer Url: http://facebook.com/post/123
User Agent: Mozilla etc...
IP: 123.123.123.123
Is under proxy?: True

所有条目都与上述类似。

我需要按 Url 列对所有条目进行分组,然后计算有多少具有相同 Url 列的条目具有相同的 User Agent、IP 和 Referer Url。

有没有办法用 Django ORM 做到这一点?


示例

Url栏相同的条目:其中12个有XXX推荐,6个有YYY推荐,10个有XXX.XXX.XXX.XXX IP,100个有YYY.YYY .YYY.YYY IP


谁能解释一下这个过程背后的逻辑?


更新好的,伙计们,我自己做的。代码如下:

urls = Url.objects.all() # select all urls
    for url in urls: # for each url count how many times the same ip, useragent, etc... are repeated
        visits = VisitLog.objects.filter(url=url)
        visit_ip = visits.values('ip').annotate(ip_count=Count('ip'))
        visit_useragent = visits.values('useragent').annotate(useragent_count=Count('useragent'))
        visit_referring_url = visits.values('referring_url').annotate(referring_url_count=Count('referring_url'))
        print(visit_referring_url)

现在有没有办法以更优雅的方式做到这一点而无需太多查询?

【问题讨论】:

    标签: python django orm group-by


    【解决方案1】:

    不,您不能为此使用 ORM。您可能必须提取用户代理、IP 和引用 URL 的所有唯一组合。然后去获取匹配每个条目的条目数。

    您最终可能会使用raw 或写custom SQL

    首先想到的是对实例表运行选择,以在所有四个列中寻找不同的值。然后需要使用这些结果来计算重复项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2011-02-03
      • 2014-03-16
      • 2019-03-23
      • 2021-11-19
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多