具有distinct和order的Django查询

具有distinct和order的Django查询,django,django-models,group-by,distinct,Django,Django Models,Group By,Distinct,我有两种型号 class Employer(models.Model): name = models.CharField(max_length=300, blank=False) id = models.IntegerField() status = models.IntegerField() eminence = models.IntegerField(null=False,default=4) class JobTitle(models.Model)

我有两种型号

class Employer(models.Model):
     name = models.CharField(max_length=300, blank=False)
     id = models.IntegerField()
     status = models.IntegerField()
     eminence = models.IntegerField(null=False,default=4)

class JobTitle(models.Model)
     name = models.CharField(max_length=300, blank=False)
     employer = models.ForeignKey(Employer,unique=False,null=True)
     activatedate = models.DateTimeField(default=datetime.datetime.now)
我需要所有的雇主按照他们的职位最后激活的顺序排列

Employer.objects.filter(status=1).order_by('eminence','-jobtitle__activatedate')
这个查询给出了我想要的,但如果雇主有多个职位,它会返回重复的雇主

我会使用
distinct()
,但在Django文档中我发现

*order_by()调用中使用的任何字段都包含在SQL SELECT列中。当与distinct()结合使用时,有时会导致意外结果。如果按相关模型中的字段排序,则这些字段将添加到选定的列中,并且它们可能会使其他重复行看起来不同。由于额外的列不会出现在返回的结果中(它们只是为了支持排序),因此有时看起来像是返回了非不同的结果*

虽然他们解释了我的问题,但没有具体的解决办法


可以给我一个建议吗?如何在不破坏API稳定性的情况下按雇主列表分组?

您可以在
雇主
类中放置其最新的
职务
激活日期,然后按此字段排序,而不使用关系。[1]这里的折衷是有点数据重复,以及当相应的
职务
实例发生变化时,需要手动更新雇主的最新职务激活日期

另外,请检查另一个使用
annotate()
的解决方案

相关问题:

[1]