我有一个字典定义为
BREED_CLASS = {
'bdcl': ['Border Collie', BreedBdcl, 'BreedBdcl'],
}
和定义为
的模型class Dog(models.Model):
breed_code = models.CharField(max_length=4, default='')
我试图使用breed_code作为键来访问字典中的项目,例如如下
return BREED_CLASS[instance.breed_code][0]
,但会引发KeyError,异常值"也就是默认值"。
我试过做一些像
bc = instance.breed_code
并正确返回保存到实例化对象('bdcl')的值。但是当我把它放入字典访问时so
return BREED_CLASS[bc][0]
会得到相同的KeyError和相同的异常值。我怎么算出来?
CharField类似乎是使用__str__
魔术方法返回一个字符串,当你打印它,给你的错觉,它是一个字符串,但它实际上是一个对象。您的字典使用实际字符串来存储值,但是当您使用BREED_CLASS[instance.breed_code]
时,您将对象传递给它。将对象转换为字符串应该可以解决这个问题。试试这个:
BREED_CLASS[str(instance.breed_code)][0]
所以我想出了一个解决办法,让我得到我想要的,但我不知道为什么它的工作。
这本身不起作用
return BREED_CLASS[instance.breed_code][2]
但是对于遍历键的for循环
for key in BREED_CLASS:
if key == instance.breed_code:
return BREED_CLASS[instance.breed_code][2]
注意,两个返回调用都是相同的,带有instance。用于字典键索引的Breed_code。有人知道为什么会这样吗?