通过相关对象Django的第一个实例对对象进行排序

时间:2016-06-28 17:31:09

标签: python django

我有一个模型,它是一个项目(票证)存在的实例,并且在每次创建一个票证时,我创建另一个模型的实例,一个记录。每条记录都会记录谁对机票进行了更改,以及它们使用它做了什么,它基本上记录了发生了什么。我希望将票证创建者和创建日期定义为指向它的第一个活动的创建者和创建日期。 (多对多关系中的第一个。

原样,我有一个非常简单的功能:

def created_by(self):
    records = Record.objects.filter(ticket=self.id).order_by('created_on')
    return records[0].created_by

但是,当我尝试对门票集合进行排序时(这在逻辑上最常按创建日期排序),我遇到了这个问题。我无法使用django的过滤器对查询进行排序。

我真的不想将冗余数据存储在数据库中,我宁愿拥有记录而不是记录,因此可以在记录中看到与故障单相关的所有日期项。关于如何制作它的想法我可以通过这个记录的第一个实例进行排序和搜索? (还需要搜索创建者,因为有些用户只能看到自己的门票,有些可以看到所有,有些可以看到子集)

谢谢!

1 个答案:

答案 0 :(得分:2)

假设Record票证字段是票证模型的外键:

TTN_NEEDTEXT

您可以替换Ticket模型的ModelManager(对象)并覆盖get_queryset函数:

 class Record (models.Model):
     ....
     create_time = models.DateTimeField()
     ticket = models.ForeignKey(Ticket,related_name='records')

现在,每个查询(如Ticket.objects.all()或Ticket.objects.filter(...))都将按创建时间排序