例如数据库
model中,有一个type字段django
type = models.CharField(max_length=255, default='BOSS', verbose_name="配置类型",choices=(('boss','boss'),('bass','bass'),))
如今须要从数据库中动态指定该字段的choices,取值的方法为:code
# 获取计划类型列表 def get_type_list(): return PlanType.objects.values_list("name", "name")
错误方法:get
直接it
type = models.CharField(max_length=255, default='BOSS', verbose_name="配置类型",choices=get_type_list())
弊端:
确实是从数据库里取了,不过数据库中修改了之后,要重启django应用才能加载
配置
解决方案:
重写model的构造方法,在构造方法中指定该字段的choices便可object
def __init__(self, *args, **kwargs): super(PlanItemConfig, self).__init__(*args, **kwargs) self._meta.get_field('type').choices = get_type_list()