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)
我需要所有雇主按照其职位名称最后激活的顺序.
Employer.objects.filter(status=1).order_by('eminence','-jobtitle__activatedate')
这个查询给了我想要的东西,但如果雇主有多个职位,它会返回重复的雇主.
我会用distinct()但在Django文件中我发现了
*order_by()调用中使用的任何字段都包含在SQL SELECT列中.当与distinct()一起使用时,这有时会导致意外结果.如果您按相关模型中的字段进行排序,则这些字段将添加到选定的列中,否则可能会使重复的行显示为不同.由于额外的列不会出现在返回的结果中(它们仅用于支持排序),因此有时会返回非独特的结果.*
虽然他们解释了我的问题没有指定解决方案.
可以给我一个建议,如何在不破坏API稳定性的情况下按我的雇主列表进行分组?
您可以在Employer课程上放置其最新的JobTitle激活日期,然后在不使用关系的情况下按此字段排序.[1] 这里的权衡是一些数据重复,并且必须在相应的JobTitle实例更改时手动更新雇主的最新职位激活日期.
另外,请查看此帖子以了解其他使用的解决方案annotate().
相关问题:
[1] Queryset API distinct()不起作用?
| 归档时间: | 
 | 
| 查看次数: | 7602 次 | 
| 最近记录: |