Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将Django Modelfield选择字符串转换为值_Python_Django - Fatal编程技术网

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

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=((

假设我有以下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\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
的一个属性,但我没有看到它在任何地方声明。