在我的django项目中,我存储了用户的假期:
python pyinstxtractor.py executable.exe
我需要一个功能来生成报告。在选定的日期范围内生成报告:
class VacationRequest(BaseModel):
requested_by = models.ForeignKey(User, related_name='vacation', verbose_name='User')
start = models.DateField(__('Start'))
end = models.DateField(__('End'))
它几乎可以正常工作,但是,我也想计算重叠的天数。
例如,当用户的休假时间为 7月10日至 7月20日,并且在我的报告中,我将class Report(BaseModel):
company = models.ForeignKey(Company, related_name='reports')
department = models.ForeignKey(Department, verbose_name=__('Department'), related_name='reports', null=True, blank=True)
title = models.CharField(verbose_name=__('Title'), null=True, blank=False, max_length=32)
start = models.DateField(__('Start'))
end = models.DateField(__('End'))
csv = models.FileField(__('CSV'), null=True, blank=True, upload_to=report_upload_path, max_length=256,
storage=reports_storage)
xls = models.FileField(__('XLS'), null=True, blank=True, upload_to=report_upload_path, max_length=256,
storage=reports_storage)
pdf = models.FileField(__('PDF'), null=True, blank=True, upload_to=report_upload_path, max_length=256,
storage=reports_storage)
def generate_files(self):
headers = ['First name', 'Last name', 'Department', 'vacation days']
department_kwarg = {'userdata__department': self.department} if self.department else {}
vacation_filter = models.Q(vacation__status=2, vacation__start__gte=self.start, vacation__end__lte=self.end) # what should I change here?
users = User.objects.filter(company=self.company, **department_kwarg).annotate(
days_used=models.Sum(models.Case(models.When(
vacation_filter, then=models.F('vacation__archive_net_days')
), output_field=models.IntegerField(), default=0))
).annotate(
days_left=models.F('userdata__vacations_days_in_year') - models.F('userdata__used_vacations_days')
).values_list('first_name', 'last_name', 'userdata__department__title', 'days_used', 'days_left')
self._generate_csv(users, headers)
self._generate_pdf(users, headers)
self._generate_xls(users, headers)
日期设置为 7月11日将返回0天,但应计算之间的天数。
这是因为
start
-它使用Vacation__start__gte-这是不正确的,我不确定在这里应该使用什么
我该如何实现?