Для Чарфилда с выбором, как использовать удобочитаемое имя в list_display через чужую клавишу?

Давайте предположим, что у меня есть следующее:

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 список в админ-сайте он отображает 0 или же 1 и не ZERO или же ONE,

Как я мог изменить это, чтобы оно отображало удобочитаемое имя из VALUE_CHOICES в списке с админа сайта?

1 ответ

Решение

Из документов и для поля val,

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

Это должно сделать работу.

[EDIT by OP] Мне не удалось заставить его работать таким образом, но этот метод был действительно хорошим предложением. Вот как я это использовал get_FOO_display() метод (и он работал как шарм).

Я только изменил мой ModelA.val() метод:

def val(self):
    return self.model_b.get_value_display()
Другие вопросы по тегам