Django - Попытка вызвать функцию модели из list_display в ModelAdmin - PullRequest
0 голосов
/ 05 апреля 2020

Я следую учебнику Mozilla Django, в настоящее время на этой странице.

Я пытаюсь получить ModelAdmin для модели Book, чтобы вызвать функция модели Book в list_display модели ModelAdmin. Это для предоставления списка жанров в списке.

У меня есть следующий код в файле admin.py:

class BookAdmin(admin.ModelAdmin):
    list_display('title', 'author', 'display_genre')

И в файле models.py:

class Book(models.Model):
    # ...
    def display_genre(self):
        return ', '.join(genre.name for genre in self.genre.all()[:3])
    display_genre.short_description = 'Genre'

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

Вот что django говорит мне, когда я пытаюсь вызвать python manage.py makemigrations:

SystemCheckError: System check identified some issues:

ERRORS:
<class 'catalog.admin.BookAdmin'>: (admin.E108) The value of 'list_display[2]' refers to 'display_genre', which is not a callable, an attribute of 'BookAdmin', or an attribute or method on 'catalog.Book'.

Я не уверен, что сделал неправильно.

1 Ответ

0 голосов
/ 05 апреля 2020

Для любого, кто читает это - у меня это работает. Вот как:

  1. Закомментируйте строку list_display в admin.py

  2. Выполните makemigrations и migrate

  3. Раскомментируйте строку list_display в admin.py

  4. Выполните makemigrations и migrate

Теперь ошибка отсутствует.

Возможно, проблема была в том, что django просматривал файл admin.py до того, как база данных была обновлена ​​на основе models.py, поэтому функция display_genre еще не существовала.

...