使用模型字段作为字典键,但它将其读取为默认值?



我有一个字典定义为

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。有人知道为什么会这样吗?

最新更新