Python 单元测试Django时区感知日期时间

Python 单元测试Django时区感知日期时间,python,django,datetime,django-unittest,Python,Django,Datetime,Django Unittest,我试图比较DRF响应和输入值 class ViewTest(TransactionTestCase): reset_sequences = True current_date_time = timezone.now() def setUp(self): self.client = APIClient() self.user = User.objects.create_user('hiren', 'a@b.com', 'password')

我试图比较DRF响应和输入值

class ViewTest(TransactionTestCase):
    reset_sequences = True
    current_date_time = timezone.now()

    def setUp(self):
        self.client = APIClient()
        self.user = User.objects.create_user('hiren', 'a@b.com', 'password')
        self.client.force_authenticate(user=self.user)
        self.tag = Tag.objects.create(name="Test tag")
        Notes.objects.create(tag=self.tag, content="test content", date=self.current_date_time)

    def test_return_correct_note(self):
        response = self.client.get('/api/notes/1/')
        self.assertEqual(response.json(), {'content': 'test content', 'id': 1,
                                           'tag': 1, 'date': self.current_date_time})
然后我得到了这个错误:

AssertionError: {'date': '2016-04-09T07:35:28.039393Z', 'co[37 chars]': 1} != {'tag': 1, 'content': 'test content', 'id':[69 chars]TC>)}
  {'content': 'test content',
-  'date': '2016-04-09T07:35:28.039393Z',
+  'date': datetime.datetime(2016, 4, 9, 7, 35, 28, 39393, tzinfo=<UTC>),
   'id': 1,
   'tag': 1}
AssertionError:{'date':'2016-04-09T07:35:28.0393Z','co[37字符]':1}={'tag':1,'content':'testcontent','id':[69个字符]TC>)}
{'content':'testcontent',
-“日期”:2016-04-09T07:35:28.039393Z,
+“日期”:datetime.datetime(2016,4,9,7,35,2839393,tzinfo=),
“id”:1,
“标记”:1}

比较django datetime的正确方法是什么?

您可以将Python
datetime
对象转换为ISO时间字符串,或者将ISO时间字符串解析为Python
datetime
对象

比如说

...
'tag': 1, 'date': self.current_date_time.strftime('%Y-%m-%dT%H:%M:%S.%fZ')})

您可以使用
类的
to_表示(…)
方法,如下所示:

from django.test import TransactionTestCase


class ViewTest(TransactionTestCase):
    reset_sequences = True
    current_date_time = timezone.now()

    def setUp(self):
        self.client = APIClient()
        self.user = User.objects.create_user("hiren", "a@b.com", "password")
        self.client.force_authenticate(user=self.user)
        self.tag = Tag.objects.create(name="Test tag")
        Notes.objects.create(
            tag=self.tag, content="test content", date=self.current_date_time
        )

    def test_return_correct_note(self):
        from rest_framework.fields import DateTimeField
        response = self.client.get("/api/notes/1/")
        self.assertEqual(
            response.json(),
            {
                "content": "test content",
                "id": 1,
                "tag": 1,
                "date": DateTimeField().to_representation(self.current_date_time),
            },
        )
来自django.test的
导入事务TestCase
类ViewTest(TransactionTestCase):
重置\u序列=真
当前日期时间=时区。现在()
def设置(自):
self.client=APIClient()
self.user=user.objects.create_user(“hiren”a@b.com“,“密码”)
self.client.force\u身份验证(user=self.user)
self.tag=tag.objects.create(name=“Test tag”)
Notes.objects.create(
tag=self.tag,content=“测试内容”,date=self.current\u date\u time
)
def测试返回正确注释(自我):
从rest_framework.fields导入DateTimeField
response=self.client.get(“/api/notes/1/”)
自我评价资格(
response.json(),
{
“内容”:“测试内容”,
“id”:1,
“标签”:1,
“日期”:DateTimeField()to_表示(自身当前日期时间),
},
)