簡體   English   中英

如何更改特定 Django 管理員 Model 中的時區?

[英]How to change the timezone in the particular Django admin Model?

我想在 Django 管理員中的一個特定 Model 內更改時區,我該怎么做?

由於 Django 在 UTC 數據庫中節省時間,我想要的是在特定時區顯示值,僅針對一個 model。 不適用於整個項目。

例如我有一個 model:

class Student(models.Models)
    created_at = models.DateTimeField()    

當我為此 model 打開 Django Admin 時,我想查看特定時區的時間(比如說 ETC),但讓 Django 節省時間。

所以我找到了解決方案:為了完成我想要完成的任務,我必須在ModelAdmin class 中進行更改。

    class StudentAdmin(Admin.ModelAdmin):
        list_display = [..., "created_at_etc", ...]
        def add_view(self, request, form_url='', extra_context=None):
            timezone.activate("US/Eastern")
            return super(ActivityAdmin, self).add_view(
                request,
                form_url,
                extra_context
            )

        def change_view(self, request, object_id, form_url='', extra_context=None):
            timezone.activate("US/Eastern")
            return super(ActivityAdmin, self).change_view(
                request,
                object_id,
                form_url,
                extra_context
          )

        def get_time(self, time):
            import pytz
            fmt = '%Y-%m-%d %H:%M:%S %Z'
            tz = pytz.timezone("US/Eastern")
            dt = time.astimezone(tz)
            return dt.strftime(fmt)

        def created_at_etc(self, student):
            return self.get_time(student.created_at)

        created_at_etc.short_description = "Created At"
    

您可以使用 django 管理員激活特定時區

from django.utils import timezone
timezone.activate("US/Eastern")

有了這個,您可以在您想要的上下文中更改時區。 正如我在add_viewchange_view中做的一樣。

首先,我重寫了add_view方法,它可以讓我們在特定時區創建Student object。 其次,我覆蓋了change_view ,以便我們可以編輯特定時區中已經存在的Student 第三,我創建了created_at_etc它將顯示相對於特定時區的日期。

有關更多信息,您可以使用這篇文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM