在Django框架中,list_display
是一个在管理界面中用于显示模型实例列表时自定义列的属性。通常,我们会将模型的字段直接作为list_display
的一部分,但有时候我们可能希望显示的内容与模型实际的字段不同,这通常是为了展示计算后的值、关联模型的字段或者进行一些自定义的处理。
list_display
定义在Django的ModelAdmin
类中,用于控制在管理界面的列表视图中显示哪些列。默认情况下,它会显示模型的所有字段。
ModelAdmin
中定义一个方法,返回需要展示的值。假设我们有一个Book
模型和一个Author
模型,我们希望在书籍列表中显示作者的名字而不是作者的ID。
from django.contrib import admin
from .models import Book, Author
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author_name')
def author_name(self, obj):
return obj.author.name
author_name.short_description = 'Author Name'
admin.site.register(Book, BookAdmin)
如果在使用自定义方法时遇到'NoneType' object has no attribute 'name'
这样的错误,通常是因为某些书籍没有关联的作者。
这可能是因为数据库中存在孤立的书籍记录,即它们没有与任何作者关联。
在自定义方法中添加检查,确保关联的对象存在。
def author_name(self, obj):
return obj.author.name if obj.author else 'Unknown'
或者,如果你希望在列表中明确标记出没有作者的书籍,可以这样做:
def author_name(self, obj):
return obj.author.name if obj.author else 'No Author'
通过上述方法,你可以灵活地在Django管理界面的列表视图中展示与模型实际字段不同的内容。
领取专属 10元无门槛券
手把手带您无忧上云