在django中计算重叠的天

时间:2018-07-11 07:01:47

标签: python django django-models django-orm python-datetime

在我的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-这是不正确的,我不确定在这里应该使用什么

我该如何实现?

0 个答案:

没有答案