如何在Django ModelAdmin中"list_display"显示ForeignKey字段的属性?

Tot*_*oum 5 python django admin foreign-keys

我遇到了与他完全相同的问题:Django ModelAdmin中的"list_display"可以显示ForeignKey字段的属性吗?

我想在答案管理员身上看到问题. 我做了与答案相同的事情,但得到了这个错误:

'Answer' object has no attribute 'question'
Run Code Online (Sandbox Code Playgroud)

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

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


class Answer(models.Model):
    question = models.ForeignKey('Question')
    answer = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

我的管理员:

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)
Run Code Online (Sandbox Code Playgroud)

dur*_*rsk 5

不知道为什么,这是行不通的,但另一种解决办法是重写__unicode__()方法Question(或者__str__(),如果你正在使用Python3),这是当你包括所显示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', ]
Run Code Online (Sandbox Code Playgroud)

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