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

问题描述 投票:0回答:1
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) 老实说,这似乎有点骇人听闻。以这种方式产生时区是否会导致未来问题?这样做的理想方式是什么?

如果django允许
选择接受可可,则可以简单地传递

lambda

函数。但是,由于尚未(尚未),因此您应该能够简单地定义模型类中的选择列表,并使用
django django-models
1个回答
9
投票
函数动态生成元组。例如:

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
数据库中

时区域,那么当您尝试编辑此类记录时,选择框将是空的。
update:

django5.0及更高版本现在支持可可:

DJANGO5.0增加了支持接受映射或可调用的支持

def get_scores(): return [(i, str(i)) for i in range(10)] class Winner(models.Model): ... score = models.IntegerField(choices=get_scores)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.