web-dev-qa-db-ja.com

Django adminサイトで、時間フィールドの表示形式を変更するにはどうすればよいですか?

最近、新しいモデルをサイトに追加しました。admin.pyファイルを使用して、管理サイトでのモデルの表示方法を正確に指定しています。これはうまく機能しますが、日付フィールドの1つに表示形式に秒を含める方法を理解できません。 「2011年8月27日午後12時12分」のような値しか表示されません。見たいのは「2011年8月27日12時12分* :37 * p.m.」

30
Trindaz

ModelAdminでこれを試してください。

def time_seconds(self, obj):
    return obj.timefield.strftime("%d %b %Y %H:%M:%S")
time_seconds.admin_order_field = 'timefield'
time_seconds.short_description = 'Precise Time'    

list_display = ('id', 'time_seconds', )

もちろん、「timefield」をモデルの適切なフィールドに置き換え、「list_display」に他の必要なフィールドを追加します。

24
Gabriel Ross

私はここで掘り下げましたが、アプリに別のアプローチを適用しました。

Django adminのデフォルト形式を変更するには、必要なすべてのタイプのDjangoロケール形式を変更します。

次のコードをadmin.pyファイル(またはsettings.py)に追加して、Django admin。

from Django.conf.locale.es import formats as es_formats

es_formats.DATETIME_FORMAT = "d M Y H:i:s"

これにより、そのファイル(または設定内の場合はサイト全体)のModelAdminの日時形式が変更されます。

@Alan Illingがコメントで指摘しているように、管理日時フィルターと注文機能を壊しません。

今後このヘルプが必要です


追加情報:

Djangoで利用可能なすべてのロケールで変更できます。

このアプローチを使用して、次の形式を変更できます

from Django.conf.locale.es import formats as es_formats

es_formats.DATETIME_FORMAT
es_formats.NUMBER_GROUPING
es_formats.DATETIME_INPUT_FORMATS  
es_formats.SHORT_DATETIME_FORMAT
es_formats.DATE_FORMAT             
es_formats.SHORT_DATE_FORMAT
es_formats.DATE_INPUT_FORMATS      
es_formats.THOUSAND_SEPARATOR
es_formats.DECIMAL_SEPARATOR       
es_formats.TIME_FORMAT
es_formats.FIRST_DAY_OF_WEEK       
es_formats.YEAR_MONTH_FORMAT
es_formats.MONTH_DAY_FORMAT
27
gabriel

ガブリエルの答えを試してもうまくいかなかった場合は、USE_L10N = False in settings.py、 わたしにはできる。

USE_L10NがTrueに設定されている場合、ロケール指定の形式が優先され、代わりに適用されます。

参照: https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-DATETIME_FORMAT

4
Orca