【发布时间】:2016-07-04 03:16:16
【问题描述】:
如何在 Django 中使用类来选择模型?
这是我想要的:
class ChoicesCls(object):
def __init__(self):
self.OPTION_ONE = 'O1'
self.OPTION_ONE_SHORT = 'Opt 1'
self.OPTION_ONE_LONG = 'Option 1'
self.OPTION_TWO = 'O2'
self.OPTION_TWO_SHORT = 'Opt 2'
self.OPTION_TWO_LONG = 'Option 2'
def get_choices(self):
return (
(self.OPTION_ONE, self.OPTION_ONE_LONG),
(self.OPTION_TWO, self.OPTION_TWO_LONG)
)
class TestModel(models.Model):
choices_obj = ChoicesCls()
field = models.CharField(choices=choices_obj.get_choices)
我想要这样的主要原因是在另一个地方我可以做这样的事情
option = "ONE"
getattr(TestModel.choices_obj, "OPTION_{}_SHORT".format(option))
【问题讨论】:
-
我不确定您要解决什么问题。您的 getattr() 示例不起作用,因为您试图从元组中获取实例属性,而不是从原始选择类。也就是说,只要格式正确,Django 并不关心您如何生成选择元组。
-
@MadWombat 我正在尝试
getattr上的ChoicesCls而不是元组。 -
在您发布的代码中 TestModel.choices 是 get_choices() 方法的结果,而不是 ChoicesCls() 实例。
-
也就是说,没有什么能阻止您定义自己的类并使其表现得像 Django 所期望的元组元组。
-
我看不到你从哪里得到的,它是
ChoicesCls的一个实例。见choices = ChoicesCls()
标签: python django python-2.7 django-1.8