Search code examples
djangodjango-modelsdate-formattingdatefield

Change Date format in Django model


I have a date field called "birthdate" and property called "lifespan" in a django model.

Field

birthdate = models.DateField(blank=True, null=True)

Property

@property
def lifespan(self):
    return '%s - present' % self.birthdate

Currently lifespan returns the date in the "yyyy-mm-dd" format.

How can I changed this date format to "mm/dd/yyyy"?

I know how to do it in a django template with a filter but wanted to see if there was a similar "filter" that I can use in a Django model.

I appreciate the feedback.


Solution

  • For full control, use strftime:

    @property
    def lifespan(self):
        return '%s - present' % self.birthdate.strftime('%m/%d/%Y')
    

    strftime doesn't have all the formatting options that Django's date filter does, so if you want one of those you could call the filter as a function:

    from django.template.defaultfilters import date
    
    @property
    def lifespan(self):
        return '%s - present' % date(self.birthdate, "n/j/Y")
    

    That would omit the leading zeros, and would let you use your DATE_FORMAT settings variable or other predefined options.