我正在创建需要存储时区值的模型。现在,我正在另一个文件中使用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)
说实话,这似乎有点骇人听闻。这样生成时区会在将来引起问题吗?做这样的事情的理想方式是什么?
答案 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
数据库中删除了时区,则当您尝试编辑这样的记录时,选择框将为空。