Higure
Higure

Reputation: 235

Use timedelta() with Django's models.DateField

I'm trying to compute the expiration date of a service provided in my Django 1.5 project

I imported: from datetime import datetime, date in the model.py file and wrote the function as it follows:

def expirationdate(self):
        date = datetime.datetime.strptime(date.today(),'%Y-%m-%d')
        return date + datetime.timedelta(days=self.premiumduration)

where self.premiumduration is defined in my module like this:

premiumduration = models.IntegerField(blank=True, null=True)

this function is called by an HTML template but it raise the following error:

AttributeError at /user/Adriano/

type object 'datetime.datetime' has no attribute 'datetime'

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/user/Adriano/

Django Version: 1.5
Python Version: 2.7.6
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'app_is')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Template error:
In template C:\Users\Adriano\Desktop\site_is\app_is\templates\user.html, error at line 31
   type object 'datetime.datetime' has no attribute 'datetime'
   21 :         {% endif %}


   22 :         {% if view_user_profile.card_type == '' %}


   23 :             <p>Card type: Not Saved


   24 :             <p>Card Number: Not Saved


   25 :         {% else %}


   26 :             <p>Card type: {{ view_user_profile.get_card_type_display }}


   27 :             <p>Card Number: {{ view_user_profile.cardinfo }}


   28 :         {% endif %}


   29 :         {% if view_user_profile.premiumstatus %}


   30 :             <p>You are a premium user from {{view_user_profile.premiumactivation}}</p>


   31 :             <p>Your premium subscription will expire  {{ view_user_profile.expirationdate }} </p>


   32 :         {% else %}


   33 :             <p>You are not a premium user yet! Buy your premium account <a href="/premium/">here!</p>


   34 :         {% endif %}


   35 :     {% endif %}


   36 : 


   37 :     


   38 :     {% if view_user == request.user %}


   39 :     <form action="/modify/" method="get">


   40 :         <input id="submit" type="button" value="Modify your profile" />


   41 :     </form>


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Adriano\Desktop\site_is\app_is\views.py" in userpage
  148.  return render(request, 'user.html', {'request': request, 'view_user': view_user, 'view_user_profile': view_user_profile})
File "C:\Python27\lib\site-packages\django\shortcuts\__init__.py" in render
  53.     return HttpResponse(loader.render_to_string(*args, **kwargs),
File "C:\Python27\lib\site-packages\django\template\loader.py" in render_to_string
  177.         return t.render(context_instance)
File "C:\Python27\lib\site-packages\django\template\base.py" in render
  140.             return self._render(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in _render
  134.         return self.nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in render
  830.                 bit = self.render_node(node, context)
File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
  74.             return node.render(context)
File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render
  124.         return compiled_parent._render(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in _render
  134.         return self.nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in render
  830.                 bit = self.render_node(node, context)
File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
  74.             return node.render(context)
File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render
  63.             result = block.nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in render
  830.                 bit = self.render_node(node, context)
File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
  74.             return node.render(context)
File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in render
  284.                 return nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in render
  830.                 bit = self.render_node(node, context)
File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
  74.             return node.render(context)
File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in render
  284.                 return nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in render
  830.                 bit = self.render_node(node, context)
File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
  74.             return node.render(context)
File "C:\Python27\lib\site-packages\django\template\debug.py" in render
  84.             output = self.filter_expression.resolve(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in resolve
  578.                 obj = self.var.resolve(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in resolve
  728.             value = self._resolve_lookup(context)
File "C:\Python27\lib\site-packages\django\template\base.py" in _resolve_lookup
  779.                             current = current()
File "C:\Users\Adriano\Desktop\site_is\app_is\models.py" in expirationdate
  48.       date = datetime.datetime.strptime(self.premiumactivation,'%Y-%m-%d')

Exception Type: AttributeError at /user/Adriano/
Exception Value: type object 'datetime.datetime' has no attribute 'datetime'

Upvotes: 0

Views: 1030

Answers (1)

mgilson
mgilson

Reputation: 309821

Your problem is the combination of:

from datetime import datetime

and

datetime.datetime.strptime(...)

You're importing the class datetime from the datetime module. strptime is a method on the datetime class, so you could fix the first error if you just use:

datetime.strptime(...)

But, then you'll get an error about datetime.timedelta1. I think what you actually want is to change the import statement:

import datetime

Now the datetime class is accessed by datetime.datetime as you did in your original code and timedelta is accessed by datetime.timedelta (again, the same as your original code). Of course, you will need to change date to datetime.date unless you import it separately (which I don't recommend).

1I like to think of this as programming "Whack-a-mole"

Upvotes: 2

Related Questions