如何将Django Modelfield选择字符串转换为值

时间:2015-06-21 03:27:59

标签: 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=((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

2 个答案:

答案 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属性的值。