加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何返回表中最受欢迎的项目,但每个项目是唯一的?

发布时间:2020-12-20 13:33:48 所属栏目:Python 来源:网络整理
导读:我想弄清楚一个棘手的Django查询,希望你能帮忙.我有这个型号: class ActiveVenue(models.Model): event = models.ForeignKey(Event) venue = models.ForeignKey(Venue)class Venue(models.Model): name = models.CharField(max_length=200)class Event(mode
我想弄清楚一个棘手的Django查询,希望你能帮忙.我有这个型号:

class ActiveVenue(models.Model):
    event = models.ForeignKey(Event)
    venue = models.ForeignKey(Venue)

class Venue(models.Model):
    name = models.CharField(max_length=200)

class Event(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=200)

在我的应用程序中有许多事件,每个事件可以有多个活动场所,因此我目前的数据结构.我希望你的解决方案不是“将你的模型改为foo”,因为这已经是一个已部署的网站,我想保留当前的模型结构.

我想写一个返回最受欢迎场所的查询,但其中每个用户只计算一次场地.例如,如果我有一个用户有四个活动并且每次都使用相同的场地,我只想在确定最受欢迎的场地时计算一次.

为了说明这一点,想象一下这是我的数据:

event: A    user: bob   venue: The Hill
event: B    user: bob   venue: The Hill
event: C    user: bob   venue: The Hill
event: D    user: jane   venue: The Oaks
event: E    user: sarah   venue: The Pound
event: F    user: david   venue: The Pound
event: G    user: ron   venue: The Oaks
event: H    user: erica   venue: The Oaks

这里流行的订单是:

1. The Oaks
2. The Pound
3. The Hill

任何建议我如何写一个查询来做这个同时适用于postgres和sqlite(换句话说,不依赖于distinct()(在sqlite中不支持))?

谢谢!

解决方法

这有用吗?

from collections import Counter 
results = Counter([vid for vid,eid in ActiveVenue.objects.values_list("venue_id","event_id").distinct()]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读