在Django的models.DateField中使用timedelta()

时间:2013-12-26 16:32:17

标签: python django datetime

我正在尝试计算Django 1.5项目

中提供的服务的到期日期

我在from datetime import datetime, date文件中导入了model.py并编写了如下函数:

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

其中self.premiumduration在我的模块中定义如下:

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

此函数由HTML模板调用,但会引发以下错误:

/ user / Adriano /

中的AttributeError

类型对象'datetime.datetime'没有属性'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'

1 个答案:

答案 0 :(得分:2)

您的问题是:

的组合
from datetime import datetime

datetime.datetime.strptime(...)

您正在从datetime 模块导入 datetimestrptimedatetime 上的一种方法,因此如果您只是使用,则可以修复第一个错误:

datetime.strptime(...)

但是,你会收到关于datetime.timedelta 1 的错误。我认为你实际上想要的是改变import语句:

import datetime

现在,您datetime访问datetime.datetime ,就像在原始代码中一样,timedelta访问了datetime.timedelta(同样,与原始代码相同)。当然,除非您单独导入(我不建议),否则您需要将date更改为datetime.date

1 我喜欢将其视为编程“Whack-a-mole”