首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用django查询查找最有用的员工

问使用django查询查找最有用的员工
EN

Stack Overflow用户
提问于 2014-03-16 08:13:41
回答 1查看 43关注 0票数 2

我有两个表/模型:

代码语言:javascript
复制
class Employee(models.Model):
    name = models.CharField(...)

class Shift(models.Model):
    start_at = models.DateTimeField()
    end_at = models.DateTimeField()
    employee = models.ForeignKey(Employee, related_name="shift_set")

我需要一份在指定日期范围内可以轮班工作的所有员工的名单。我想要这个列表按可用性排序(大多数可用在顶部)。我有一个部分有效的查询:

代码语言:javascript
复制
qs = Employee.objects.filter(shift_set__start_at__gte=start_at,
                             shift_set__end_at__lte=end_at
                             ).annotate(overlapping_events=models.Count('shift_set'))
return qs.order_by('overlapping_events', 'last_name', 'first_name')

这个查询的问题是,我只得到那些有冲突的人,而不是那些没有冲突的人。没有排班的员工不会出现在这个列表中,即使他们应该出现在列表的顶部。如何还包括在此日期范围内没有轮班的员工?

所以我稍微修改了一下:

代码语言:javascript
复制
qs = Employee.objects.filter(
    Q(shift_set__isnull=True)
    | Q(shift_set__start_at__gte=start_at, shift_set__end_at__lte=end_at)).annotate(
        overlapping_events=models.Count('shift_set__employee__id'))
return qs.order_by('overlapping_events', 'last_name', 'first_name')

但在100名员工中,仍有20名被排除在外,这20名员工有轮班,但没有冲突。

如何在Django中编写此查询?

EN

回答 1

Stack Overflow用户

发布于 2014-03-16 21:05:51

如果第一个(未修改的)查询返回qs =(不需要的/冲突的对象),那么您不能运行Employee.objects.all()并简单地排除gs (根据需要对剩余的对象进行排序吗?)

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

https://stackoverflow.com/questions/22431402

复制
相关文章

相似问题

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