Django model calculated field to get number of days subtracting given date with system date

Viewed 206

Am trying to generate a column value dynamically i.e calculate "number of days a demand is open from the day demand is requested", am trying to subtract requested date from system date to get the days directly in django model but not getting output below is the django model code any help please

from django.db import models
from datetime import datetime

Demand_Id = models.CharField(max_length=10, default='BLANK')`enter code here`
Requested_Date = models.DateField(default=datetime.now)
Days_Open = models.IntegerField(default=0)

@property
def get_Days(self):
    date_format = "%Y-%m-%d"
    sysdate = datetime.strptime(str(datetime.now().date()), date_format)
    odays = (sysdate - datetime.strptime((self.Requested_Date), date_format)).days
    return self.odays

@property   
def save(self, *args, **kwargs):
    self.Days_Open = self.get_Days()
    super(Demand_Master, self).save(*args, **kwargs)

def __str__(self):
    return self.Demand_Id
2 Answers

Simply,

from django.utils import timezone


class Foo(models.Model):
    # rest of your code

    @property
    def get_Days(self):
        return (timezone.now() - self.Requested_Date).days

You should not make Days_Open a field if it directly is derived from another field, since that introduces data duplication.

from django.utils.timezone import now

class MyModel(models.Model):
    demand_id = models.CharField(max_length=10, default='BLANK')
    requested_date = models.DateField(default=datetime.now)

    @property
    def days_open(self):
        return (now().date()-self.request_date).days

    def __str__(self):
        return self.demand_id
Related