猿问
下载APP

Django ModelAdmin中的“list_display”可以显示ForeignKey

Django ModelAdmin中的“list_display”可以显示ForeignKey字段的属性吗?

我有一个Person具有外键关系的模型Book,它有许多字段,但我最关心author(标准的CharField)。

话虽如此,在我的PersonAdmin模型中,我想显示book.author使用list_display

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

我已经尝试了所有这些明显的方法,但似乎没有任何效果。

有什么建议?


SMILET
浏览 104回答 3
3回答

手掌心

作为另一种选择,您可以查找如下:class UserAdmin(admin.ModelAdmin):     list_display = (..., 'get_author')     def get_author(self, obj):         return obj.book.author     get_author.short_description = 'Author'     get_author.admin_order_field = 'book__author'

MMTTMM

我更喜欢这个:class CoolAdmin(admin.ModelAdmin):     list_display = ('pk', 'submodel__field')     @staticmethod     def submodel__field(obj):         return obj.submodel.field

慕莱坞森

尽管上面有很多很好的答案,而且由于我是Django的新手,我还是被困住了。这是我从一个非常新手的角度来解释的。models.pyclass Author(models.Model):     name = models.CharField(max_length=255)class Book(models.Model):     author = models.ForeignKey(Author)     title = models.CharField(max_length=255)admin.py(错误的方式) - 你认为它可以通过使用'model__field'来引用,但事实并非如此class BookAdmin(admin.ModelAdmin):     model = Book     list_display = ['title', 'author__name', ]admin.site.register(Book, BookAdmin)admin.py(正确的方法) - 这是你如何引用Django方式的外键名称class BookAdmin(admin.ModelAdmin):     model = Book     list_display = ['title', 'get_name', ]     def get_name(self, obj):         return obj.author.name     get_name.admin_order_field  = 'author'  #Allows column order sorting     get_name.short_description = 'Author Name'  #Renames column head     #Filtering on side - for some reason, this works     #list_filter = ['title', 'author__name']admin.site.register(Book, BookAdmin)有关其他参考,请参阅此处的Django模型链接
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答