2017-08-18 3 views
0

J'ai 2 DateField sous ma forme, et start_dateend_date et un FloatField appelé duration. Je trouve comment enregistrer automatiquement la durée sans entrée de l'utilisateur en calculant la durée de début et de fin, mais comment puis-je donner une condition pour passer le week-end, et un jour férié particulier?week-end et les jours fériés Sauter le calcul durée entre 2 datefields

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) 

Répondre

2

Une solution possible est d'utiliser la fonction de busday_countnumpy:

import numpy as np 


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

Ce qui donne exactement le nombre de jours sans week-ends et jours fériés.