如何在Django ModelAdmin中使用“list_display”显示ForeignKey字段的属性?

6
我有和他一模一样的问题:在Django ModelAdmin中,“list_display”可以显示ForeignKey字段的属性吗? 我想在答案管理页面上看到这个问题。 我按照答案中的步骤做了同样的事情,但是出现了以下错误:
'Answer' object has no attribute 'question'

这是我的代码(问题可能有多个可能的答案):

class Question(models.Model):
    question = models.CharField(max_length=255)


class Answer(models.Model):
    question = models.ForeignKey('Question')
    answer = models.CharField(max_length=255)

我的管理员:

class AnswerAdmin(admin.ModelAdmin):
    model = Answer
    list_display = ['answer', 'get_question', ]

    def get_question(self, obj):
        return obj.question.question


admin.site.register(Answer, AnswerAdmin)

1
你尝试过在list_display中使用元组(tuple)而不是列表(list)吗? - dursk
是的,我得到了同样的错误。 - TotuDoum
这是你实际的代码吗?在我看来它看起来没问题,所以我不确定为什么会出现那个错误。 - Alasdair
1个回答

6

不确定为什么这种方法不起作用,但另一种解决办法是覆盖 Question__unicode__()方法(如果您使用的是Python3,则为__str__()),这是在将ForeignKey字段包含在list_display中时显示的内容:

class Question(models.Model):
    question = models.CharField(max_length=255)

    def __unicode__(self):
        return self.question


class Answer(models.Model):
    question = models.ForeignKey('Question')
    answer = models.CharField(max_length=255)

class AnswerAdmin(admin.ModelAdmin):
    model = Answer
    list_display = ['answer', 'question', ]

文档:https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

这个链接是Django官方文档中关于list_display的部分,它是用于在后台管理页面显示模型对象的字段和方法。你可以使用该属性来自定义需要显示的内容,从而使后台管理页面更加易读和易用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接