Edk*_*dke 7 django django-admin django-timezone
如何根据本地时间和时区格式化Admin中的DateTimeField?
我的settings.py:
TIME_ZONE = 'Europe/Bratislava'
LANGUAGE_CODE = 'en-us'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Run Code Online (Sandbox Code Playgroud)
pytz包已安装.
模型:
class Material(models.Model):
category = models.ForeignKey(Category, null=True, blank=True)
code = models.CharField(max_length=10)
description = models.CharField(max_length=30, blank=True, null=True)
modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
还在设置中尝试了一些日期格式化,这没有改变datetime对象在管理列表显示中转换为字符串的方式:
DATETIME_FORMAT = 'd N Y'
DATE_FORMAT = 'd N Y'
Run Code Online (Sandbox Code Playgroud)
在数据库中,datetime正确存储,"2012-11-20 08:57:15.901341 + 01".但是在admin中显示时,它始终是UTC.
我可以在ModelAdmin中准备处理格式的方法,但这并不是真的干,因为我想我的管理类看起来像:
from django.utils.timezone import localtime
class MaterialAdmin(admin.ModelAdmin):
list_display = ('code', 'modified_local', 'created')
def modified_local(self, row):
return localtime(row.modified)
modified_local.admin_order_field = 'modified'
modified_local.short_description = 'Modified'
Run Code Online (Sandbox Code Playgroud)
这个问题的答案,你的问题是正确的配置settings,并formats在Django项目.示例项目的结构:
.
|-- README.md
|-- demo.db
|-- demo_time_set
| |-- __init__.py
| |-- demo.db
| |-- formats
| | |-- __init__.py
| | `-- en
| | |-- __init__.py
| | `-- formats.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
|-- manage.py
|-- requirments.txt
`-- some_app
|-- __init__.py
|-- admin.py
`-- models.py
Run Code Online (Sandbox Code Playgroud)
您可以通过提供具有适当名称和formats.py的目录来为多种语言定义它.formats.py所有MAGIC发生的示例内容可以如下所示:
# HERE FORMATING AS shown in:
# LIST: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
DATE_FORMAT = 'd-m-Y'
TIME_FORMAT = 'H:i'
DATETIME_FORMAT = 'd-m-Y H:i'
YEAR_MONTH_FORMAT = 'F Y'
MONTH_DAY_FORMAT = 'F j'
SHORT_DATE_FORMAT = 'm/d/Y'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
FIRST_DAY_OF_WEEK = 1
# BUT here use the Python strftime format syntax,
# LIST: http://docs.python.org/library/datetime.html#strftime-strptime-behavior
DATE_INPUT_FORMATS = (
'%d-%m-%Y', # '21-03-2014'
)
TIME_INPUT_FORMATS = (
'%H:%M:%S', # '17:59:59'
'%H:%M', # '17:59'
)
DATETIME_INPUT_FORMATS = (
'%d-%m-%Y %H:%M', # '21-03-2014 17:59'
)
DECIMAL_SEPARATOR = u'.'
THOUSAND_SEPARATOR = u','
NUMBER_GROUPING = 3
Run Code Online (Sandbox Code Playgroud)
请注意评论中的两个链接,它们将指导您正确配置的列表,这些配置对于不同的部件是不同的!
在你settings.py刚才添加:
FORMAT_MODULE_PATH = 'demo_time_set.formats'
Run Code Online (Sandbox Code Playgroud)
[GITHUB]这是一个完整的工作示例:https://github.com/andilab/demo_time_set
| 归档时间: |
|
| 查看次数: |
7752 次 |
| 最近记录: |