如何使用类来选择 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))
最佳答案
尝试这样的事情
class FakeChoices: 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_tuple(self): return ( (self.OPTION_ONE, self.OPTION_ONE_LONG), (self.OPTION_TWO, self.OPTION_TWO_LONG) ) def __getitem__(self, key): return self.__get_tuple()[key] def __iter__(self): return iter(self.__get_tuple()) ... class TestModel(models.Model): field = models.CharField(choices=FakeChoices())
正如您想象的那样,您可以将各种疯狂的逻辑放入 FakeChoices 类中。你应该能够做到
option = "ONE" getattr(TestModel._meta.get_field('field').choices, "OPTION_{}_SHORT".format(option))
关于python - 模型选择类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36066229/