django 2.0.2 python 3.4
models.py
Post(models.Model):
Id = pk
content = text
Reply(models.Model):
Id = pk
PostId = Fk(Post)
content = text
view.py
Post.objects.all().annotate(lastreply=F("Reply__content__last"))
可以使用F()中的最后一个查询吗?
答案 0 :(得分:0)
据我所知,latest
不能与F()
一起使用。
一种可能的解决方案是在reply
类
Post(models.Model):
Id = pk
content = text
Reply(models.Model):
Id = pk
PostId = Fk(Post)
content = text
timestamp = DateTime(auto)
然后,您可以使用此格式的查询来获取每个帖子的最新回复。
Reply.objects.annotate(max_time=Max('Post__Reply__timestamp')).filter(timestamp=F('max_time'))
请注意,这对于大量记录来说非常耗时。
如果您使用的是Postgres数据库,则可以使用distinct()
Reply.objects.order_by('Post__Id','-timestamp').distinct('Post__Id')