本文介绍了Django AttributeError'datetime.date'对象没有属性'utcoffset'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Django的新手,如果问题的解释看起来很怪异,就对不起。

I'm a newbie in Django, so sorry if explanation of problem looks weird.

我在Django项目中创建了一个博客应用。

I created a blog app within a Django project.

models.py

from django.db import models

class Blog(models.Model):
    title = models.CharField(max_length=255)
    pub_date = models.DateTimeField() # issue appears because of this statement
    body = models.TextField()
    image = models.ImageField(upload_to='images/')

当我在站点的管理页面中创建一个新的博客对象时,一切正常,并且对象被创建并存储到数据库中。但是当我要编辑此博客对象(在博客列表中单击它)时,出现此错误:

When I create a new blog object in admin page of site, everything's fine and object gets created and stored to the database. But when I want to edit this blog object (clicking on it in the list of blogs), I get this error:

AttributeError at /admin/blog/blog/2/change/
'datetime.date' object has no attribute 'utcoffset'

完整追溯:

Environment:


Request Method: GET
Request URL: http://localhost:8000/admin/blog/blog/2/change/

Django Version: 2.0.2
Python Version: 3.6.4
Installed Applications:
['jobs.apps.JobsConfig',
 'blog.apps.BlogConfig',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template C:\Users\LENOVO\Anaconda3\lib\site-packages\django\contrib\admin\templates\admin\includes\fieldset.html, error at line 19
   'datetime.date' object has no attribute 'utcoffset'
   9 :             {% for field in line %}
   10 :                 <div{% if not line.fields|length_is:'1' %} class="field-box{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
   11 :                     {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
   12 :                     {% if field.is_checkbox %}
   13 :                         {{ field.field }}{{ field.label_tag }}
   14 :                     {% else %}
   15 :                         {{ field.label_tag }}
   16 :                         {% if field.is_readonly %}
   17 :                             <div class="readonly">{{ field.contents }}</div>
   18 :                         {% else %}
   19 :                              {{ field.field }}
   20 :                         {% endif %}
   21 :                     {% endif %}
   22 :                     {% if field.field.help_text %}
   23 :                         <div class="help">{{ field.field.help_text|safe }}</div>
   24 :                     {% endif %}
   25 :                 </div>
   26 :             {% endfor %}
   27 :         </div>
   28 :     {% endfor %}
   29 : </fieldset>


Traceback:

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\core\handlers\exception.py" in inner
  35.             response = get_response(request)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\core\handlers\base.py" in _get_response
  158.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\core\handlers\base.py" in _get_response
  156.                 response = response.render()

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\response.py" in render
  106.             self.content = self.rendered_content

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\backends\django.py" in render
  61.             return self.template.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  175.                     return self._render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in _render
  167.         return self.nodelist.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\loader_tags.py" in render
  155.             return compiled_parent._render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in _render
  167.         return self.nodelist.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\loader_tags.py" in render
  155.             return compiled_parent._render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in _render
  167.         return self.nodelist.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\loader_tags.py" in render
  67.                 result = block.nodelist.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\loader_tags.py" in render
  67.                 result = block.nodelist.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\defaulttags.py" in render
  211.                     nodelist.append(node.render_annotated(context))

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\loader_tags.py" in render
  194.                 return template.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  177.                 return self._render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in _render
  167.         return self.nodelist.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\defaulttags.py" in render
  211.                     nodelist.append(node.render_annotated(context))

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\defaulttags.py" in render
  211.                     nodelist.append(node.render_annotated(context))

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\defaulttags.py" in render
  314.                 return nodelist.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\defaulttags.py" in render
  314.                 return nodelist.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render
  999.         return render_value_in_context(output, context)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\template\base.py" in render_value_in_context
  978.             value = str(value)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\utils\html.py" in <lambda>
  371.     klass.__str__ = lambda self: mark_safe(klass_str(self))

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\forms\boundfield.py" in __str__
  36.         return self.as_widget()

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\forms\boundfield.py" in as_widget
  118.             **kwargs

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\forms\widgets.py" in render
  234.         context = self.get_context(name, value, attrs)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\contrib\admin\widgets.py" in get_context
  104.         context = super().get_context(name, value, attrs)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\forms\widgets.py" in get_context
  806.             value = self.decompress(value)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\forms\widgets.py" in decompress
  894.             value = to_current_timezone(value)

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\forms\utils.py" in to_current_timezone
  176.     if settings.USE_TZ and value is not None and timezone.is_aware(value):

File "C:\Users\LENOVO\Anaconda3\lib\site-packages\django\utils\timezone.py" in is_aware
  247.     return value.utcoffset() is not None

Exception Type: AttributeError at /admin/blog/blog/2/change/
Exception Value: 'datetime.date' object has no attribute 'utcoffset'

如果我将 models.DateTimeField()更改为 models.DateField()或添加 auto_now_add = True DateTimeField (以使该字段不可编辑),一切正常,博客对象变为可编辑而没有错误。

If I change models.DateTimeField() to models.DateField() or if I add auto_now_add=True to DateTimeField (so that it makes this field uneditable) everything becomes ok and blog object becomes editable without errors.

那么问题显然是什么导致了此错误,以及如何解决该错误?

So the question obviously is what caused this error and how to fix it?

Django版本2.0.2 (也在2.0.5上尝试过)

Django version 2.0.2 (also tried on 2.0.5)

Python版本3.6.4

Python version 3.6.4

推荐答案

好像模型实例返回您日期数据。看一下数据库列,看看它的类型不是日期。大概在数据库创建之前,您的模型就有 pub_date 作为。如果是这样,请运行 makemigrations migrate 来根据您当前的模型调整数据库类型。

Seems like model instance returns you date data. Take a look on database column and see if it its type not date. Probably previously during database creation your model had pub_date as DateField. If so, run makemigrations and migrate to adjust database type according your current model.

这篇关于Django AttributeError'datetime.date'对象没有属性'utcoffset'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 03:12