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

dar*_*rse 3 django django-models

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

时区.py

import pytz
TIMEZONE_CHOICES = []
for tz in pytz.all_timezones:
    TIMEZONE_CHOICES.append((tz, tz))
TIMEZONE_CHOICES = tuple(TIMEZONE_CHOICES)
Run Code Online (Sandbox Code Playgroud)

模型.py

from .timezones import TIMEZONE_CHOICES

class MyModel(models.Model):
    timezone = models.CharField(max_length=255, default='UTC', choices=TIMEZONE_CHOICES)
Run Code Online (Sandbox Code Playgroud)

老实说,这看起来有点 hack-y。以这种方式生成时区会在将来引起问题吗?做这样的事情的理想方式是什么?

Sel*_*cuk 8

如果 Django 允许选择接受可调用对象,您只需传递一个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)
Run Code Online (Sandbox Code Playgroud)

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