簡體   English   中英

復雜的Django模型查詢

[英]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個字段: gameturntype (我將它們添加到上面的代碼中),我需要根據給定特定game turntype (例如,類似.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM