django DurationField在django管理界面中仅显示HH:MM:SS。
不幸的是,在目前的情况下,这还不够。
我需要能够在管理界面中显示/编辑微秒。
怎么可以这样做?
更新
这是一个错误。我在数据库中的数据是错误的。在数据进入数据库之前在进程中删除的微秒。
如果有的话,Django会显示微秒。你不需要做任何事情来展示它们。
答案 0 :(得分:1)
了解来源:
https://docs.djangoproject.com/en/2.0/_modules/django/db/models/fields/#DurationField
我认为方法是覆盖forms.DurationField
(https://docs.djangoproject.com/en/2.0/_modules/django/forms/fields/#DurationField)并确切地说是这些方法:
from django.utils.duration import duration_string
def duration_string(duration):
"""Version of str(timedelta) which is not English specific."""
days, hours, minutes, seconds, microseconds = _get_duration_components(duration)
string = '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)
if days:
string = '{} '.format(days) + string
if microseconds:
string += '.{:06d}'.format(microseconds)
return string
请注意,可能还需要覆盖这些django.utils.dateparse.parse_duration
def parse_duration(value):
"""Parse a duration string and return a datetime.timedelta.
The preferred format for durations in Django is '%d %H:%M:%S.%f'.
Also supports ISO 8601 representation and PostgreSQL's day-time interval
format.
"""
match = standard_duration_re.match(value)
if not match:
match = iso8601_duration_re.match(value) or postgres_interval_re.match(value)
if match:
kw = match.groupdict()
days = datetime.timedelta(float(kw.pop('days', 0) or 0))
sign = -1 if kw.pop('sign', '+') == '-' else 1
if kw.get('microseconds'):
kw['microseconds'] = kw['microseconds'].ljust(6, '0')
if kw.get('seconds') and kw.get('microseconds') and kw['seconds'].startswith('-'):
kw['microseconds'] = '-' + kw['microseconds']
kw = {k: float(v) for k, v in kw.items() if v is not None}
return days + sign * datetime.timedelta(**kw)