2017-08-18 45 views
0

我有2 DateField以我的形式,start_dateend_dateFloatField被稱爲duration。我計算出如何在沒有用戶輸入的情況下通過計算開始和結束日期的持續時間來自動保存持續時間,但我如何給出一個條件來跳過週末和任何特定的公衆假期?跳過週末和公衆假期時,計算2個日期域之間的持續時間

model.py:

class Leave(models.Model): 
    employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='+') 
    start_date = models.DateField() 
    end_date = models.DateField() 
    duration = models.FloatField(null=True, blank=True) 

form.py:

class LeavesDetailForm(forms.ModelForm): 
    class Meta: 
     model = Leave 
     fields = ('employee', 'start_date', 'end_date', 'duration') 
     widgets = {'start_date': forms.DateInput(attrs={'type': 'date'}), 
        'end_date': forms.DateInput(attrs={'type': 'date'}), 
        'employee': forms.HiddenInput(), 
        'duration': forms.HiddenInput()} 

view.py:

def my_leaves_view(request): 
    """ 
    My Leaves view 
    :param request: 
    :return: 
    """ 
    form = LeavesDetailForm(request.POST or None) 
     if form.is_valid(): 
      inst = form.save(commit=False) 
      inst.start_date = form.cleaned_data['start_date'] 
      inst.end_date = form.cleaned_data['end_date'] 
      duration = (inst.end_date - inst.start_date).days 
      inst.duration = duration 
      inst.save() 
      return HttpResponseRedirect('/hrm/employee/leaves') 
    return render(request, 'hrm/employee/details/my_leaves.html', context) 

回答

2

一種可能的解決方案可以是使用numpybusday_count功能:

import numpy as np 


def my_leaves_view(request): 
    ... 
    inst.duration = np.busday_count(inst.start_date, inst.end_date) 
    ... 

在沒有周末和節假日的情況下,它給出了完全天數。

相關問題