【问题标题】:Django - Trying to call a model function from list_display in ModelAdminDjango - 试图从 ModelAdmin 中的 list_display 调用模型函数
【发布时间】:2020-04-04 21:08:01
【问题描述】:

我正在关注 Mozilla 的 Django 教程,目前在 this 页面上。

我试图让Book 模型的ModelAdmin 调用ModelAdmin 的list_display 中的Book 模型的函数。这是为了在列表显示中提供流派列表。

我在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'.

我不确定我做错了什么。

【问题讨论】:

    标签: python django ubuntu mozilla


    【解决方案1】:

    对于任何阅读本文的人 - 我已经开始工作了。方法如下:

    1. 注释掉admin.py中的list_display行

    2. 运行makemigrations和migrate

    3. 取消注释admin.py 中的list_display 行

    4. 运行makemigrations 和migrate

    现在没有收到错误。

    也许问题是django在基于models.py更新数据库之前查看admin.py文件,因此display_genre函数还不存在?

    【讨论】:

    • 既然这是问题的答案,你应该用对勾标记来表示。除此之外,当makemigrations 被调用时,admin.py 在models.py 之前被调用,这听起来很合乎逻辑,因此它会抛出错误。
    • 说我必须等待 2 天才能接受自己的答案
    猜你喜欢
    • 1970-01-01
    • 2020-09-12
    • 2018-12-03
    • 2012-01-28
    • 2010-10-31
    • 1970-01-01
    • 2013-04-13
    • 2016-08-12
    • 1970-01-01
    相关资源
    最近更新 更多