私は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)
そして、何私がやりたいことはTransitionLog
のtransitioned_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
でマッチを行う方法がわかりません。私は、ログを別々に取得してそこからジョインすることで、2つのクエリでこれを行うこともできることを知っていますが、私もそれを避けたいと思います。
誰でも、最新のタイムスタンプ遷移ログを特定のProduct
の1つのクエリで取得できる方法を提案できますか?どんな助けもありがとう。ありがとう!