为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

SMILET 2019-08-23 16:30:29

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

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

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

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

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

有什么建议?


查看完整描述

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'


查看完整回答
反对 回复 2019-08-23
?
MMTTMM

我更喜欢这个:

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

    @staticmethod
    def submodel__field(obj):
        return obj.submodel.field


查看完整回答
反对 回复 2019-08-23
?
慕莱坞森

尽管上面有很多很好的答案,而且由于我是Django的新手,我还是被困住了。这是我从一个非常新手的角度来解释的。

models.py

class 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模型链接


查看完整回答
反对 回复 2019-08-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信