[英]Complex Django model query
我有以下模型:
class Vote(models.Model):
voter = models.ForeignKey(User)
target = model.ForeignKey(User)
timestamp = models.DateTimeField()
game = models.ForeignKey(Game)
step = model.IntegerField()
type = models.ForeignKey(VoteType)
我需要選擇投票最多的目標,如果是平局,則選擇投票最早的目標。 可以使用Django ORM嗎?
更新:實際上,我在Vote中還有3個字段: game
, turn
和type
(我將它們添加到上面的代碼中),我需要根據給定特定game
turn
, type
(例如,類似.filter(game=1, step=2, type=3)
)
您可以使用注釋為每個用戶選擇投票計數和最早的投票時間,然后按帶注釋的字段排序並選擇第一個:
from django.db.models import Count, Min
winner = User.objects.annotate(vote_count=Count('vote_set'))\
.annotate(first_vote_time=Min('vote_set__timestamp'))\
.order_by('-vote_count', 'first_vote_time')[0]
更新:您可以應用以下過濾器以僅計算特定游戲的票數:
.filter(vote_set__game=game, vote_set__step=step, vote_set__type=type)
雙下划線允許您過濾相關對象的屬性。
確保在注釋之前應用過濾器,以便只計算正確的選票,並確保所有選票的過濾條件都在同一過濾器調用內。 為什么要執行后者說明在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.