将所有时区作为Django模型的最佳选择是什么?

时间:2018-10-17 06:11:56

标签: django django-models

我正在创建需要存储时区值的模型。现在,我正在另一个文件中使用pytz生成时区,将其转换为元组,然后将该元组调用到我的 models.py 中。像这样:

timezones.py

import pytz
TIMEZONE_CHOICES = []
for tz in pytz.all_timezones:
    TIMEZONE_CHOICES.append((tz, tz))
TIMEZONE_CHOICES = tuple(TIMEZONE_CHOICES)

models.py

from .timezones import TIMEZONE_CHOICES

class MyModel(models.Model):
    timezone = models.CharField(max_length=255, default='UTC', choices=TIMEZONE_CHOICES)

说实话,这似乎有点骇人听闻。这样生成时区会在将来引起问题吗?做这样的事情的理想方式是什么?

1 个答案:

答案 0 :(得分:1)

如果Django允许choices to accept callables,则可以简单地传递一个lambda函数。但是,由于还没有,您应该能够在模型类中简单地定义选择列表,并使用zip函数动态生成元组。例如:

import pytz

class MyModel(models.Model):
    TIMEZONE_CHOICES = zip(pytz.all_timezones, pytz.all_timezones)

    timezone = models.CharField(max_length=255, default='UTC', choices=TIMEZONE_CHOICES)

我唯一看到的问题是,如果将来从tz数据库中删除了时区,则当您尝试编辑这样的记录时,选择框将为空。