在list_view中显示其他模型的属性

时间:2013-02-07 15:06:14

标签: django django-models django-admin

我有以下3个型号:

class ModelA(models.Model):
    one = models.Charfield()
    two = models.Charfield()
    #etc

class ModelB(models.Model):
    modela = models.ForeignKey(ModelA)
    modelc = models.ForeignKey(ModelC)
    #etc

class ModelC(models.Model):
    five = models.Charfield()
    six = models.Charfield()
    #etc

我有ModelA的管理员:

class ModelAAdmin(admin.ModelAdmin):
    list_display = ('one', 'two')

我想要实现的是在ModelA的管理列表视图中显示ModelC的属性“五”:

list_display = ('one', 'two', 'five')

我收到此错误:

ModelAAdmin.list_display[2], 'five' is not a callable or an attribute of 'ModelAAdmin' or found in the model 'ModelA'.

正确......我理解......因为ForeignKey不在ModelA上,而在ModelB上。

但是如何在管理列表视图中显示该属性?

1 个答案:

答案 0 :(得分:0)

您可以将list_display元素设为一个函数,该对象将对象作为参数。

def get_five(obj):
    return ("%s") % obj.modelc.five

get_five.short_description = 'five'

class ModelAAdmin(admin.ModelAdmin):
    list_display = ('one', 'two', get_five)

不确定您是否能够像这样访问modelc,但如果没有,您可以创建查询。