假设我有以下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=((C, "C"), (D, "D")),
)
def set_B(self, choice_val):
self.B = #WHAT GOES HERE??
self.save()
现在假设我创建了一个myModel类型的对象X
。
然后我打电话给X.set_B("D")
。我希望myModel的set_B()
方法将B
的值设置为myModel.D
。我怎样才能做到这一点?我必须在set_B()
中添加什么代码才能转换人类可读的值" D"到myModel.D
?
答案 0 :(得分:1)
您可以在班级构建一个查找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()
答案 1 :(得分:1)
您只需使用./models/member
功能。
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()
函数将返回choice_val属性的值。