Django查询与distinct和order_by

brs*_*gic 16 django group-by distinct django-models

我有两个型号

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

我需要所有雇主按照其职位名称最后激活的顺序.

Employer.objects.filter(status=1).order_by('eminence','-jobtitle__activatedate')
Run Code Online (Sandbox Code Playgroud)

这个查询给了我想要的东西,但如果雇主有多个职位,它会返回重复的雇主.

我会用distinct()但在Django文件中我发现了

*order_by()调用中使用的任何字段都包含在SQL SELECT列中.当与distinct()一起使用时,这有时会导致意外结果.如果您按相关模型中的字段进行排序,则这些字段将添加到选定的列中,否则可能会使重复的行显示为不同.由于额外的列不会出现在返回的结果中(它们仅用于支持排序),因此有时会返回非独特的结果.*

虽然他们解释了我的问题没有指定解决方案.

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

Ant*_*off 8

您可以在Employer课程上放置其最新的JobTitle激活日期,然后在不使用关系的情况下按此字段排序.[1] 这里的权衡是一些数据重复,并且必须在相应的JobTitle实例更改时手动更新雇主的最新职位激活日期.

另外,请查看此帖子以了解其他使用的解决方案annotate().

相关问题:

[1] Queryset API distinct()不起作用?