在管理员中将整数选择值显示为字符(非整数)

时间:2015-11-04 00:54:49

标签: python django django-admin

我试图显示选择字段中的值。使用以下方法,导致"存储"要打破的模型(从管理员点击它)

错误是:

TypeError __str__ returned non-string (type int)

当我将 str 更改为 int 时,错误会停止 - 但它不会显示区域选项(只是"区域对象") 。

country_list = ['Global', 'Australia', 'United Kingdom', 'United States']

Region_CHOICES = tuple(enumerate(country_list, start=1))

class Region (models.Model):
    region = models.IntegerField(choices=Region_CHOICES)
    def __str__(self):
        return self.region

class Store(models.Model):
    store_name = models.CharField(max_length=30)
    region = models.ManyToManyField(Region, blank=True)

如何让它正确地返回Region作为选择(从单词列表中,而不是整数本身)?

2 个答案:

答案 0 :(得分:1)

问题是您的__str__方法必须返回str类型的对象。

由于索引是self.region中存储的索引,因此您只需执行查找:

class Region(models.Model):
    ...
    def __str__(self):
        return Region_CHOICES[self.region][1]

答案 1 :(得分:0)

只需输入强制转换为字符串

即可
def __str__(self):
    return str(self.region)

这对我有用