Django ModelAdmin中的" list_display"可以显示ForeignKey字段的属性吗?
时间:2020-03-06 15:02:31 来源:igfitidea点击:
我有一个Person模型,该模型与Book具有外键关系。本书有许多领域,但我最关心的是"作者"(标准CharField)。
话虽如此,在我的PersonAdmin模型中,我想使用" list_display"显示" book.author"。我已经尝试了所有显而易见的方法(参见下文),但是似乎没有任何效果。有什么建议?
class PersonAdmin(admin.ModelAdmin): list_display = ['book.author',]
解决方案
根据文档,我们只能显示ForeignKey的__unicode__表示形式:
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#list-display
似乎很奇怪,它不支持DB API中其他所有地方都使用的'book__author'样式格式。
原来有一张用于此功能的票证,标记为"无法修复"。
作为另一种选择,我们可以进行如下查找:
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'
这个已经被接受了,但是如果还有其他假人(像我一样)没有立即从当前接受的答案中得到答案,那么这里有更多细节。
" ForeignKey"引用的模型类需要在其中包含一个" unicode"方法,如下所示:
class Category(models.Model): name = models.CharField(max_length=50) def __unicode__(self): return self.name
这对我来说很重要,应该适用于上述情况。这适用于Django 1.0.2.
我们可以使用可调用对象在列表显示中显示所需的任何内容。它看起来像这样:
def book_author(object): return object.book.author class PersonAdmin(admin.ModelAdmin): list_display = [book_author,]
AlexRobbins的答案对我有用,除了前两行需要在模型中(也许这是假设的?),并且应该引用self:
def book_author(self): return self.book.author
然后管理部分可以很好地工作。
像其他人一样,我也选择了可调用对象。但是它们有一个缺点:默认情况下,我们无法订购它们。幸运的是,有一个解决方案:
def author(self): return self.book.author author.admin_order_field = 'book__author'