Может ли list_display в Django ModelAdmin отображать атрибуты полей ForeignKey? - PullRequest
250 голосов
/ 02 октября 2008

У меня есть Person модель, которая имеет отношение внешнего ключа к Book, которая имеет несколько полей, но меня больше всего беспокоит author (стандартный CharField).

Учитывая вышесказанное, в моей PersonAdmin модели я бы хотел отобразить book.author, используя list_display:

class PersonAdmin(admin.ModelAdmin):
    list_display = ['book.author',]

Я испробовал все очевидные методы для этого, но, похоже, ничего не работает.

Есть предложения?

Ответы [ 13 ]

3 голосов
/ 28 мая 2016

В PyPI есть очень простой в использовании пакет, который обрабатывает именно это: django-related-admin . Вы также можете увидеть код в GitHub .

Используя это, вы просто хотите:

class PersonAdmin(RelatedFieldAdmin):
    list_display = ['book__author',]

Обе ссылки содержат полную информацию об установке и использовании, поэтому я не буду вставлять их здесь в случае их изменения.

Как примечание, если вы уже используете что-то отличное от model.Admin (например, вместо этого я использовал SimpleHistoryAdmin), вы можете сделать это: class MyAdmin(SimpleHistoryAdmin, RelatedFieldAdmin).

0 голосов
/ 22 сентября 2016

Я предпочитаю это:

class CoolAdmin(admin.ModelAdmin):
    list_display = ('pk', 'submodel__field')

    @staticmethod
    def submodel__field(obj):
        return obj.submodel.field
0 голосов
/ 25 марта 2009

Ответ AlexRobbins работал для меня, за исключением того, что первые две строки должны быть в модели (возможно, это предполагалось?), И должны ссылаться на себя:

def book_author(self):
  return self.book.author

Тогда администраторская часть работает хорошо.

...