Python 如何将Django Modelfield选择字符串转换为值
假设我有以下Django模型:Python 如何将Django Modelfield选择字符串转换为值,python,django,Python,Django,假设我有以下Django模型: class myModel(models.Model): C = "myC" D = "myD" A = models.CharField(max_length=254, null=False, blank=False,) B = models.CharField( max_length=254, null=False, blank=False, choices=((
class myModel(models.Model):
C = "myC"
D = "myD"
A = models.CharField(max_length=254, null=False, blank=False,)
B = models.CharField(
max_length=254,
null=False,
blank=False,
choices=((C, "C"), (D, "D")),
)
def set_B(self, choice_val):
self.B = #WHAT GOES HERE??
self.save()
现在假设我创建了一个myModel类型的对象X
。
然后我调用
X.set\u B(“D”)
。我希望myModel的set_B()
方法将B
的值设置为myModel.D
。我该怎么做?我必须在set_B()
中输入什么代码,以便将人类可读的值“D”转换为myModel.D
您可以在类级别构造一个查找dict
,并使用它:
class MyModel(models.Model):
B_CHOICES = ((C, "C"), (D, "D"))
B_VALUES_FROM_NAME = {name: val for val, name in B_CHOICES}
B = models.CharField(
max_length=254,
null=False,
blank=False,
choices=B_CHOICES,
)
def set_B(self, name):
self.B = MyModel.B_VALUES_FROM_NAME[name]
self.save()
您只需使用
getattr
功能即可
class myModel(models.Model):
A = models.CharField(max_length=254, null=False, blank=False,)
B = models.CharField(
max_length=254,
null=False,
blank=False,
choices=((C, "C"), (D, "D")),
)
C = #Something
D = #Something
def set_B(self, choice_val):
self.B = getattr(self,choice_val)
self.save()
getattr
函数将返回choice\u val属性的值。在(C,“C”),(D,“D”)
中,什么是C
,因为您一直在说myModel.D
,好像D
是myModel
的一个属性,但我没有看到它在任何地方声明。