【发布时间】:2017-11-10 06:07:42
【问题描述】:
在 Django 1.11 中,我有一个父子模型(一对多关系)简化如下:
class Conversation(models.Model):
name = models.CharField(max_length=150)
class Comment(models.Model):
comment_text = models.TextField()
submitted_date = models.DateTimeField()
conversation = models.ForeignKey(Conversation, on_delete=models.CASCADE)
class Meta:
ordering = ['-submitted_date']
一个对话可以有多个 cmets。现在我想做的是订购一个拥有最新 cmets 的对话。我试图将其添加到对话模型中:
class Meta:
ordering = ['-comment__submitted_date']
这种方法有效,但它会在查询集中返回重复项——这种重复行为在 Django 中有很好的记录以及它发生的原因——https://docs.djangoproject.com/en/1.11/ref/models/querysets/#order-by——但它没有说明如何解决它。
我正在寻找解决此限制的方法。总体目标是:按照最近的评论 (submitted_date) 对对话进行排序。我尝试了多种变体,但它要么根本不排序,要么返回重复项(这对我没有用)。 distinct() 也不起作用,这也记录在链接中。
我可以在对话中添加一个“updated_at”或类似的字段,并在创建/更新评论时更新它,但这对我来说真的很老套和不干净,我宁愿避免如果可能的话。
有什么建议吗?
【问题讨论】:
标签: python django django-models