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

Show Integer choice value as Characters (not integer) in Admin

我正在尝试显示选项字段中的值。使用以下方法,导致 "Store" 模型损坏(从管理员中单击它)

错误是:

TypeError __str__ returned non-string (type int)

当我将 str 更改为 int 时,错误停止 - 但它不显示区域选择(只是 "Region Object").

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)

我怎样才能正确选择 return 区域(来自单词列表,而不是整数本身)?

问题是您的 __str__ 方法 必须 return 类型为 str.

的对象

由于索引是存储在 self.region 中的内容,您可以简单地进行查找:

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

只需将类型强制转换为字符串

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

这对我有用