2016-06-03 2 views
8

Я пытаюсь проверить создание корзины, основанный на django cartДжанго: RunTimeWarning: DateTimeField получил наивные DateTime в то время как поддержка часового пояса активна

Но я эту ошибку, когда я пытаюсь создать телегу:

RunTimeWarning: DateTimeField получил наивные DateTime в то время как поддержка часового пояса активна

Я сделал некоторые исследования, но я не мог решить мою проблему для datetime.datetime.now()

test_views.py в моем каталоге тестов:

from django.test import TestCase, Client, RequestFactory 
import unittest 
from django.contrib.auth.models import User, AnonymousUser 
from front.models import Entreprise, Cart, CartItems 
from decimal import Decimal 
from front.cart import models 
import datetime 
import pytz 
from pytz import all_timezones 
from django.utils import timezone 



def _create_cart_in_database(self, creationDate=datetime.datetime.now(), checkedOutDate=True): 
    """ 
     Helper function so I don't repeat myself 
    """ 
    cart = models.Cart() 
    cart.creationDate = creationDate 
    cart.checkedOutDate = False 
    cart.save() 
    return cart 


def test_cart_creation(self): 
    creationDate = datetime.datetime.now() 
    cart = self._create_cart_in_database(creationDate) 
    id = cart.id 

    cart_from_database = models.Cart.objects.get(pk=id) 
    self.assertEquals(cart, cart_from_database) 

models.py:

class Cart(models.Model): 
    creationDate = models.DateTimeField() 

У меня также есть USE_TZ = True в моих настройках.

timezone.now() Я попытался, но до сих пор не работает:

def _create_cart_in_database(self, creationDate=timezone.now(), checkedOutDate=True): 

def test_cart_creation(self): 
    creationDate = timezone.now() 

RunTimeWarning: DateTimeField Cart.creationDate получил наивные DateTime (2016-06-03 08: 46: 34.829000) в то время как поддержка часовой пояс активный.

EDIT:

У меня есть эта ошибка сейчас, и это кажется формат ошибка DateTime?

updated = self._save_table(raw, cls, force_insert, force_update, using, upda 
te_fields) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\ba 
se.py", line 820, in _save_table 
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\ba 
se.py", line 859, in _do_insert 
    using=using, raw=raw) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\ma 
nager.py", line 122, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\qu 
ery.py", line 1039, in _insert 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\sq 
l\compiler.py", line 1059, in execute_sql 
    for sql, params in self.as_sql(): 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\sq 
l\compiler.py", line 1019, in as_sql 
    for obj in self.query.objs 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\sq 
l\compiler.py", line 958, in prepare_value 
    value = field.get_db_prep_save(value, connection=self.connection) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\fi 
elds\__init__.py", line 728, in get_db_prep_save 
    prepared=False) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\fi 
elds\__init__.py", line 1461, in get_db_prep_value 
    value = self.get_prep_value(value) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\fi 
elds\__init__.py", line 1440, in get_prep_value 
    value = super(DateTimeField, self).get_prep_value(value) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\fi 
elds\__init__.py", line 1296, in get_prep_value 
    return self.to_python(value) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\fi 
elds\__init__.py", line 1399, in to_python 
    parsed = parse_datetime(value) 
    File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\utils\datepa 
rse.py", line 93, in parse_datetime 
    match = datetime_re.match(value) 
TypeError: expected string or buffer 
+0

Вы должны попытаться включить только ваш * соответствующий * код в вашу проблему, его неясно, где находится настоящая проблема. Кроме того, посмотрите на любой из связанных вопросов справа. – Sayse

+1

@Sayse Я уменьшил код :) –

+0

Помимо ответа Selcuk, вы можете избежать установки методов по умолчанию на метод 'now()'. Я уверен, что он не будет выполняться каждый раз, когда вы вызываете функцию ... только когда сначала инициализируется – Sayse

ответ

22

Следующая строка создает наивный (не часовой пояс осведомленный) DateTime:

creationDate = datetime.datetime.now() 

Попробуйте изменить эту строку:

creationDate = timezone.now() 

Не забудьте импортировать timezone на начало вашего кода:

from django.utils import timezone 
+1

Здесь часовой пояс будет часовым поясом сервера? Что делать, если есть пользователи разных часовых поясов, и мы хотим записать их часовые пояса? –

+0

@MukundGandlur Нет никакого «пользователя» в отношении ORM. Если вы хотите, чтобы учетные записи пользователей веб-сайта (через django-auth) учитывались, вы должны написать представление, которое отправляет правильное время datetime методу помощника. – Selcuk

+0

Мои настройки: USE_TZ = True, TIME_ZONE = 'UTC'.' Но когда я использую 'timezone.now()', он не показывает 'tzinfo = ' .... Итак, этот объект datetime передается как наивный , Почему это происходит? – user3595632