Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Admin为DateTime输入时区,并在其中显示_Python_Django - Fatal编程技术网

Python Django Admin为DateTime输入时区,并在其中显示

Python Django Admin为DateTime输入时区,并在其中显示,python,django,Python,Django,我将让用户将事件输入我们的管理员(Django 1.4)。如果他们能够输入日期/时间并选择发生和显示的时区,这将是最直观的 也就是说,我希望他们能够以某种方式指定“此事件将在11月2日美国东部时间下午4:00发生”,并确保它显示在该时区 管理员似乎还没有任何处理时区条目或为datetime字段指定时区的能力,因此我不太确定如何做到这一点。Django在1.4中为模型datetime对象添加了 但是,我还没有使用它,我不确定它是否允许在管理员中或在创建ModelForm时自动设置时区 了解正在发生

我将让用户将事件输入我们的管理员(Django 1.4)。如果他们能够输入日期/时间并选择发生和显示的时区,这将是最直观的

也就是说,我希望他们能够以某种方式指定“此事件将在11月2日美国东部时间下午4:00发生”,并确保它显示在该时区

管理员似乎还没有任何处理时区条目或为datetime字段指定时区的能力,因此我不太确定如何做到这一点。

Django在1.4中为模型datetime对象添加了

但是,我还没有使用它,我不确定它是否允许在管理员中或在创建ModelForm时自动设置时区

了解正在发生的事情很重要,一旦掌握了正在做的事情,使用django的时区支持可能会更好

忽略内部django支持,我会用以下方式解决这个问题:

from pytz import all_timezones, timezone

TIMEZONES = zip(all_timezones, all_timezones)

class EventModel(models.Model):

    dt = models.DateTimeField() # user entry
    tz = models.CharField(max_length=150,
                          choices=TIMEZONES) # user entry

    def get_dt_in_user_timezone(self, user_profile):
        event_tz = timezone(self.tz)
        event_dt = event_tz.localize(self.dt) # assign timezone to datetime

        # convert registered datetime to utc
        # --> This can probably be bypassed
        utc_dt = event_dt.astimezone(pytz.utc) 

        # convert to user's time defined in profile
        user_tz = timezone(user_profile.tz)
        return utc_dt.astimezone(user_tz)

在python中处理时区时,您将需要。

您始终可以创建一个单独的“时区”字段。我知道这一点,但如何将其应用于datetime字段,以便正确保存(以便针对该时区进行调整)。然后,当在管理员中重新显示datetime进行编辑时,我如何使它显示正确的时间(因为它现在将根据您输入的时区进行调整,而不是根据settings.py中的时区进行调整,这就是那些显示的时区。)