2

I want to calculate days difference between two dates in Django. i am trying this code:

My Model :

dateDeDebut = models.DateTimeField(auto_now_add=False, auto_now=False)
dateDeFin = models.DateTimeField(auto_now_add=False, auto_now=False)

My classViewSet :

class MyClassViewSet(viewsets.ModelViewSet):
    serializer_class = MyClassSerializer
    permission_classes = (IsAuthenticated, )

    def perform_create(self, serializer):
        if (condition):
            diff = (self.request.data.get('dateDeFin') - self.request.data.get('dateDeDebut')).days #never executed
        print(diff)

And I get this error :

unsupported operand type(s) for -: 'unicode' and 'unicode'
Naella
  • 425
  • 2
  • 6
  • 17
  • `self.request.data.get('dateDeFin')` is a string that you got from the user when the form was submitted. It's not a datetime object. – Dekel Aug 18 '17 at 12:55
  • 'https://stackoverflow.com/questions/151199/how-do-i-calculate-number-of-days-betwen-two-dates-using-python' may this can help – Kallz Aug 18 '17 at 12:56
  • How i can convert it to a datetime object? Thanks – Naella Aug 18 '17 at 12:57
  • https://stackoverflow.com/a/19068355/148726 See here for example – AndriJan Aug 18 '17 at 13:07
  • 2
    Why don't you get the values from the serializer, which has already converted them? Or the model itself? – Daniel Roseman Aug 18 '17 at 13:07
  • I did this to get the values from the serializer : diff = serializer.data.get('dateDeFin') - serializer.data.get('dateDeDebut') But I still have the save error – Naella Aug 18 '17 at 13:15

1 Answers1

3

This solution works for me

class MyClassViewSet(viewsets.ModelViewSet):
    serializer_class = MyClassSerializer
    permission_classes = (IsAuthenticated, )

    def perform_create(self, serializer):
        if (condition):
            start_date = datetime.datetime.strptime(self.request.data.get('dateDeFin'), "%Y-%m-%d %H:%M")
            end_date = datetime.datetime.strptime(self.request.data.get('dateDeDebut'), "%Y-%m-%d %H:%M")
            diff = abs((end_date-start_date).days)
        print(diff)
Naella
  • 425
  • 2
  • 6
  • 17