Django Admin не может отобразить атрибуты в модели с несколькими внешними ключами к другой модели
В принципе, у меня есть две модели, одна для иконок, а другая для типов, которые имеют 3 иконки (бизнес-правило). В моем файле models.py у меня есть следующее:
class Icon(models.Model):
name = models.CharField(max_length=60)
image_URL = models.CharField(max_length=255)
modified_date = models.DateTimeField(auto_now=True)
creation_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Type(models.Model):
name = models.CharField(max_length=60)
modified_date = models.DateTimeField(auto_now=True)
creation_date = models.DateTimeField(auto_now_add=True)
icon1 = models.ForeignKey(Icon, null=True, blank=True, on_delete=models.SET_NULL, related_name="icon1")
icon2 = models.ForeignKey(Icon, null=True, blank=True, on_delete=models.SET_NULL, related_name="icon2")
icon3 = models.ForeignKey(Icon, null=True, blank=True, on_delete=models.SET_NULL, related_name="icon3")
def __str__(self):
return self.name
В моем файле admin.py у меня есть следующее:
class TypeAdmin(admin.ModelAdmin):
list_display = (
'name',
'icon1__name',
'modified_date',
'creation_date',
'id'
)
...
admin.site.register(models.Type, TypeAdmin)
Все работает нормально, но я не могу заставить его отображать имя иконки. Это работает для других классов, которые имеют один атрибут Foreign Key одной модели, однако здесь, поскольку есть три атрибута Foreign Key одной модели, я получаю ошибку:
<class 'app.admin.TypeAdmin'>: (admin.E108) Значение 'list_display[1]' ссылается на 'icon1__name', который не является вызываемой переменной, атрибутом 'TypeAdmin', атрибутом или методом в 'app.Type'.
Что вызывает эту ошибку? Как я могу ее исправить? FK может быть нулевым (или пустым), потому что некоторым типам разрешено не иметь значков (не быть обязательными).
Решено: благодаря ответу Iain, не следует вызывать атрибут и оставить его как icon1
вместо icon1__name
, поскольку он вызывает метод __str__
, который все равно возвращает имя.