【发布时间】:2016-11-22 17:50:39
【问题描述】:
我正在使用 Django 1.10。
我有几个看起来像这样的模型:
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)
而我想做的是用最新的转换状态注释Product QuerySet,即TransitionLog 的transitioned_to 字段。最新状态将是具有最新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 的最新时间戳转换日志?任何帮助,将不胜感激。谢谢!
【问题讨论】:
标签: django django-models