对于有选择的Charfield,如何通过外键在list_display中使用人类可读的名称?

时间:2016-05-16 00:17:01

标签: django django-models django-admin django-modeladmin

我们假设我有以下内容:

models.py:

VALUE_CHOICES = (('0', 'ZERO'),
                 ('1', 'ONE'))

class ModelA(models.Model):
    def val(self):
        return self.model_b.value or ''

class ModelB(models.Model):
    modela = models.OneToOneField(ModelA, related_name="model_b", null=False)
    value = models.CharField(choices = VALUE_CHOICES)

admin.py:

class ModelAAdmin(ModelAdmin):
    list_display = ['val']

当我尝试在管理网站中显示我的ModelA列表时,它会显示01而非ZEROONE

我如何修改它以使其显示来自管理网站列表中VALUE_CHOICES的人类可读名称?

1 个答案:

答案 0 :(得分:1)

来自docs,以及字段val

class ModelAAdmin(ModelAdmin):
    list_display = ['get_val_display']

这应该可以胜任。

[ OP编辑] 我没有成功让它像这样工作,但这种方法是一个非常好的建议。以下是我使用此get_FOO_display()方法的方法(它就像魅力一样)。

我只修改了我的ModelA.val()方法:

def val(self):
    return self.model_b.get_value_display()