Recentemente ho aggiunto un nuovo modello al mio sito e sto utilizzando un file admin.py per specificare esattamente come voglio che appaia nel sito di amministrazione. Funziona alla grande, ma non riesco a capire come ottenere uno dei miei campi data per includere secondi nel suo formato di visualizzazione. Sto vedendo solo valori come "27 agosto 2011, 12:12 pm" quando quello che voglio vedere è "27 agosto 2011, 12: 12 * : 37 * p.m."Nel sito di amministrazione Django, come posso cambiare il formato di visualizzazione dei campi temporali?
risposta
Prova questa nel 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',)
Sostituzione "timeField" con il campo appropriato nel modello, naturalmente, e l'aggiunta di tutti gli altri campi necessari a "list_display".
scavando intorno ho finito qui ma applicato un approccio diverso alla mia app.
È possibile modificare i formati predefiniti di admin di django modificando i formati internazionali di django per ogni tipo desiderato.
Metti quanto segue sul tuo file admin.py (o settings.py) per cambiare il formato predefinito datetime sul tuo admin django.
from django.conf.locale.es import formats as es_formats
es_formats.DATETIME_FORMAT = "d M Y H:i:s"
Cambierà i formati datetime di ModelAdmin su quel file (o l'intero sito se nelle impostazioni).
Non si interrompe i filtri admin datetime e le funzionalità degli ordini come @Alan Illing ha sottolineato nei commenti.
speranza questo aiuto nel futuro
Info extra:
È possibile modificare per ogni locale disponibile in Django, che sono un sacco.
È possibile modificare i seguenti formati utilizzando questo approccio
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
Ricordati di cambiare il locale che usi effettivamente 'dai formati di importazione di django.conf.locale.en come en_formats' e poi di' en_formats.DATETIME_FORMAT = "dmY H: i: s" ' –
Just abriviating antkowcz answer: Per l'inglese:' da django.conf.locale.en formati di importazione come en_formats e poi en_formats.DATETIME_FORMAT = "dmY H: i: s" ' Per uso spagnolo:' da django.conf.locale.es formati di importazione come es_formats es_formats.DATETIME_FORMAT = "d MYH: i: s" ' e così via ...... –
Se hai provato la risposta di Gabriel, ma non funziona, tenta di impostare USE_L10N = False
in settings.py
, funziona per me.
Nota che se USE_L10N è impostato su True, quindi il formato dalla locale dettata ha più alta precedenza e sarà applicato al posto
See: https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-DATETIME_FORMAT
fare le cose come questo rompe con l'amministratore automatica filtri. – donatello
Immagino che intendessi [strftime] (http://docs.python.org/3.3/library/time.html#time.strftime) – Martin
Esiste un modo per formattare il timestamp ma mantenere la funzionalità di ordinamento nell'amministratore? –