2016-11-22 55 views
1

我正在使用Django 1.10。使用相關模型的__max查找註釋查詢集

我有一對夫婦的模型,看起來像:

class Product(models.Model): 
    name = models.CharField(max_length=255) 
    ... 


class TransitionLog(models.Model): 
    TransitionStates =[ 
     ('state_one', _('State One')), 
     ('state_two', _('State Two')), 
     ('state_three', _('State Three')) 
    ] 
    product = models.ForeignKey(Product) 
    transitioned_to = models.CharField(choices=TransitionStates, null=False, blank=False) 
    transitioned_timestamp = models.DateTimeField(auto_now_add=True) 

而我想做的是最新的過渡狀態,這是TransitionLogtransitioned_to場註釋Product查詢集。最新的國家將是最近的國家transitioned_timestamp

我做得到大多數的方式有以下幾點:

Product.objects.annotate(latest_transition=Case(When(transitionlog__pk=Max('transitionlog__pk'), then='transitionlog__transitioned_to'))) 

但是我擔心的還有就是Max()只着眼於PK,並採取最高的國家之一,這爲我的目的工作,但我寧願做的是得到最新的transitioned_timestamp

問題是我不知道在找到最新的時間戳後如何在TransitionLog.pk上做一個匹配。我知道我也可以在兩個查詢中做到這一點,分別獲取日誌和從那裏進行連接,但我也想避免這種情況。

任何人都可以提出一個辦法,我能得到通過時間戳過渡記錄中最近在單個查詢指定Product?任何幫助,將不勝感激。謝謝!

回答

1

我能想到的最好的辦法是回過頭來看看其他的方式,獲取最新轉變爲每個產品。然後,您可以讓您的產品通過轉換訪問它們。

transitions = TransitionLog.objects.all().order_by('-transitioned_timestamp').distinct('product_id') 

雖然有一件事可能是一個問題。您將不會有沒有關聯的產品TrasitionLog對象。