2011-08-27 34 views
17

Gần đây tôi đã thêm một mô hình mới vào trang web của mình và tôi đang sử dụng tệp admin.py để chỉ định chính xác cách tôi muốn nó xuất hiện trong trang quản trị. Nó hoạt động tốt, nhưng tôi không thể tìm ra cách để có được một trong các trường ngày tháng của tôi để bao gồm giây trong định dạng hiển thị của nó. Tôi chỉ thấy các giá trị như "Ngày 27 tháng 8 năm 2011, 12:12 chiều" khi những gì tôi muốn được xem là "ngày 27 tháng 8 năm 2011, 12: 12 * : 37 * chiều"Trong trang quản trị Django, làm cách nào để thay đổi định dạng hiển thị của các trường thời gian?

Trả lời

13

Hãy thử điều này trong 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',) 

Thay thế "timefield" với lĩnh vực thích hợp trong mô hình của bạn, tất nhiên, và thêm bất kỳ lĩnh vực cần thiết khác trong "list_display".

+10

Làm việc như thế này ngắt bằng cách sử dụng quản trị tự động bộ lọc. – donatello

+2

Tôi đoán bạn có nghĩa là [strftime] (http://docs.python.org/3.3/library/time.html#time.strftime) – Martin

+1

Có cách nào để định dạng dấu thời gian nhưng vẫn giữ lại chức năng phân loại trong quản trị viên không? –

17

đào xung quanh Tôi đã kết thúc ở đây nhưng đã áp dụng một cách tiếp cận khác với ứng dụng của mình.

Thay đổi định dạng mặc định của quản trị viên django có thể được thực hiện thay đổi định dạng ngôn ngữ django cho mọi loại bạn muốn.

Đặt thông tin sau trên tệp admin.py của bạn (hoặc settings.py) để thay đổi định dạng mặc định datetime tại quản trị django của bạn.

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

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

Nó sẽ thay đổi định dạng datetime của ModelAdmin trên tệp đó (hoặc toàn bộ trang web nếu trong cài đặt).

Nó không phá vỡ bộ lọc giờ làm việc của quản trị viên và các tính năng đặt hàng như @Alan Illing đã chỉ ra trong nhận xét.

hy vọng sự giúp đỡ này trong tương lai


thêm thông tin:

Bạn có thể thay đổi nó cho mỗi miền địa phương có sẵn trong django, đó là rất nhiều.

Bạn có thể thay đổi các định dạng sau sử dụng phương pháp này

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 
+2

Hãy nhớ thay đổi địa phương bạn thực sự sử dụng như 'từ django.conf.locale.en định dạng nhập khẩu như en_formats' và sau đó' en_formats.DATETIME_FORMAT = "dmY H: i: s" ' –

+0

Chỉ cần bắt đầu antkowcz trả lời: Để sử dụng tiếng Anh:' từ django.conf.locale.en định dạng nhập như en_formats và sau đó en_formats.DATETIME_FORMAT = "dmY H: i: s" ' Để sử dụng tiếng Tây Ban Nha: ' từ django.conf.locale.es định dạng nhập dưới dạng es_formats es_formats.DATETIME_FORMAT = "d MYH: i: s" ' và cứ như vậy ...... –

2

Nếu bạn đã thử trả lời gabriel nhưng nó không hoạt động, cố gắng thiết lập USE_L10N = False trong settings.py, nó làm việc cho tôi.

Lưu ý rằng nếu USE_L10N được thiết lập thành True thì định dạng miền địa phương quyết có độ ưu tiên cao hơn và sẽ được áp dụng thay vì

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

Các vấn đề liên quan