首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用distinct和order_by的Django查询

使用distinct和order_by的Django查询
EN

Stack Overflow用户
提问于 2011-07-11 18:04:40
回答 1查看 7.8K关注 0票数 16

我有两个型号

代码语言:javascript
复制
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)

我需要所有雇主按其职务最后激活的顺序。

代码语言:javascript
复制
Employer.objects.filter(status=1).order_by('eminence','-jobtitle__activatedate')

这个查询给出了我想要的结果,但是如果employer有多个职位,它会返回重复的雇主。

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

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

尽管他们解释了我的问题,但没有具体说明解决方案。

可以给我一个建议,我怎样才能在不破坏API稳定性的情况下按我的雇主列表分组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-11 18:37:32

您可以将其最新的JobTitle激活日期放在Employer类中,然后在不使用关系的情况下按此字段排序。1这里的权衡是存在一些数据重复,并且在相应的JobTitle实例发生更改时需要手动更新雇主的最新职务激活日期。

另外,在this post上查找另一个使用annotate()的解决方案。

相关问题:

1

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6648545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档