Reputation: 235
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
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.timedelta
1. 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