fix: DateTimeWidget not timezone sensitive (#813) (#943)

BREAKING CHANGE: previously datetime fields where not exported in
regards to default timezone

fixes: #942, #813
This commit is contained in:
Bojan Mihelac 2019-10-11 07:35:37 +02:00 committed by Andrew Graham-Yooll
parent d75c381d7b
commit 4589d4c40b
7 changed files with 43 additions and 8 deletions

View File

@ -192,6 +192,8 @@ class DateTimeWidget(Widget):
def render(self, value, obj=None):
if not value:
return ""
if settings.USE_TZ:
value = timezone.localtime(value)
return value.strftime(self.formats[0])

View File

@ -21,6 +21,7 @@ class BookResource(ModelResource):
class BookAdmin(ImportExportMixin, admin.ModelAdmin):
list_display = ('name', 'author', 'added')
list_filter = ['categories', 'author']
resource_class = BookResource

View File

@ -0,0 +1,28 @@
# Generated by Django 2.1.5 on 2019-04-09 06:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0007_auto_20180628_0411'),
]
operations = [
migrations.CreateModel(
name='EBook',
fields=[
],
options={
'proxy': True,
'indexes': [],
},
bases=('core.book',),
),
migrations.AddField(
model_name='book',
name='added',
field=models.DateTimeField(blank=True, null=True),
),
]

View File

@ -40,6 +40,7 @@ class Book(models.Model):
published = models.DateField('Published', blank=True, null=True)
published_time = models.TimeField('Time published', blank=True, null=True)
price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
added = models.DateTimeField(blank=True, null=True)
categories = models.ManyToManyField(Category, blank=True)

View File

@ -291,6 +291,7 @@ class ModelResourceTest(TestCase):
headers = self.resource.get_export_headers()
self.assertEqual(headers, ['published_date', 'id', 'name', 'author',
'author_email', 'published_time', 'price',
'added',
'categories', ])
def test_export(self):

View File

@ -1,6 +1,7 @@
from datetime import date, datetime, time, timedelta
from decimal import Decimal
import pytz
from core.models import Author, Category
from django.test import TestCase
@ -62,14 +63,11 @@ class DateTimeWidgetTest(TestCase):
self.assertEqual(self.widget.clean("13.08.2012 18:00:00"),
self.datetime)
@override_settings(USE_TZ=True)
@override_settings(USE_TZ=True, TIME_ZONE='Europe/Ljubljana')
def test_use_tz(self):
self.assertEqual(self.widget.render(self.datetime),
"13.08.2012 18:00:00")
aware_dt = timezone.make_aware(self.datetime,
timezone.get_default_timezone())
self.assertEqual(self.widget.clean("13.08.2012 18:00:00"),
aware_dt)
utc_dt = timezone.make_aware(self.datetime, pytz.UTC)
self.assertEqual(self.widget.render(utc_dt), "13.08.2012 20:00:00")
self.assertEqual(self.widget.clean("13.08.2012 20:00:00"), utc_dt)
class DateWidgetBefore1900Test(TestCase):
@ -289,4 +287,4 @@ class JSONWidgetTest(TestCase):
def test_render_none(self):
self.assertEqual(self.widget.render(None), None)
self.assertEqual(self.widget.render(dict()), None)
self.assertEqual(self.widget.render({"value": None}), '{"value": null}')
self.assertEqual(self.widget.render({"value": None}), '{"value": null}')

View File

@ -100,3 +100,7 @@ LOGGING = {
'root': {
'handlers': ['console'],
}}
# USE_TZ = True
# TIME_ZONE = 'Europe/Ljubljana'