小编Chr*_*rus的帖子

Django 1.11 order by field on related model 重复结果解决方法

在 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']
Run Code Online (Sandbox Code Playgroud)

一个对话可以有很多评论。现在我想要做的是对有最新评论的对话进行排序。我试图将其添加到对话模型中:

class Meta:
  ordering = ['-comment__submitted_date']
Run Code Online (Sandbox Code Playgroud)

并且这种工作,但它在查询集中返回重复项 - 这种重复行为在 Django 中有详细记录以及它发生的原因 - https://docs.djangoproject.com/en/1.11/ref/models/querysets/#order- by - 但它没有说明如何解决它。

我正在寻找一种方法来解决此限制。总体目标是:按最近的评论 (submitted_date) 对对话进行排序。我尝试了多种变体,但它要么根本不排序,要么返回重复项(这对我没用)。distinct() 也不起作用,链接中也记录了这一点。

可以在 Conversation 中添加一个“updated_at”或类似的字段,并在创建/更新评论时更新它,但这对我来说真的很讨厌和不干净,如果可能的话,我宁愿避免它。

有什么建议?

python django django-models

4
推荐指数
1
解决办法
592
查看次数

标签 统计

django ×1

django-models ×1

python ×1