我想弄清楚一個棘手的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中不支持))?
謝謝!
我很確定'Disctinct'應該在sqlite中工作。按照https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct,你不能在sqlite中指定參數,但該函數應該可以工作。 – miki725 2013-03-26 05:33:47
考慮到用戶限制,我不認爲你可以使用Django ORM來做到這一點。爲此,您似乎必須編寫一些手動SQL。 – miki725 2013-03-26 05:35:27
@ miki725我同意,如果它被抽象爲一個返回集合的函數,它可以在支持distinct()的情況下推遲到ORM,否則手動SQL。 – 2013-03-26 22:15:55