我正在尝试找出一个棘手的 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 中不受支持))?
谢谢!