我有每个人应用的员工和叶子类型,如休闲,病假,假期,产假,陪产...我想要一张每个员工的餐桌,其中包含在不同的leave_types中批准的叶子数量,不包括当年的sat,sun 2017
Eg:
person 1 applied sick leave from 11th sept,Mon 2017 to 13 sept,Wed 2017--3 days
person 1 applied sick leave from 14th sept,Thu 2017 to 15 sept,Fri 2017--2 days
person 1 applied Casual leave from 14th ,Thu 2017 to 15 sept,Fri 2017--2 days
person 1 applied Vacation leave from 18th ,Mon 2017 to 26 sept,Tue 2017--7 days excluding sat,sun
然后我需要一张
形式的表格| leave type|count|
| vacation | 7 |
| casual | 2 |
| sick | 5 |
这适用于单身员工......我甚至为每位员工都需要它
models.py
class employees(models.Model):
emp_name = models.CharField(max_length = 100)
emp_loc = models.CharField(max_length = 100)
manager_id=models.IntegerField(null=True)
class leave(models.Model):
employee = models.ForeignKey(employees, on_delete=models.CASCADE, default='1')
start_date = models.DateField()
end_date = models.DateField()
l_type=models.CharField(max_length=1)
答案 0 :(得分:0)
from django.db.models import Count
leave.objects.all().values('l_type').annotate(count=Count('l_type')).
order_by('l_type')
答案 1 :(得分:0)
我认为您可以通过进行这些更改来实现:
class leaves(models.Model)
employee = models.ForeignKey(employees, on_delete=models.CASCADE, default='1')
start_date = models.DateField()
end_date = models.DateField()
duration = models.DurationField(null=True)
l_type = models.CharField(max_length=20)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
self.duration = (self.end_date - self.start_date)
return super(Leaves, self).save()
save()将在创建对象时自动计算持续时间。
现在要获得特定类型的叶子的总天数,请说“假期”:
leave_length = leaves.objects.filter(l_type='vacation').aggregate(Sum('duration'))['duration__sum'].days
聚合(Sum(' fieldname'))返回一个dict,其中包含与键名 fieldname__sum 关联的总和值,在我们的示例中 duration__sum 强>
要排除工作日,请参阅此问题的答案: Count number of days between dates, ignoring weekends