django admin中不可编辑的外键字段的超链接

时间:2014-11-01 20:51:28

标签: django django-admin django-models

有一个东西我有一个使用ForeignKey / OneToOneFiled到其他模型的模型(可编辑设置为False),如下所示:

class Campus(TimeStampedModel, StatusModel):
    # other fields

    gallery = models.ForeignKey(Album, editable=False, related_name='campus')

我想要实现的是让校园管理页面链接到图库(不是可编辑字段,只是链接)。所以在django文档link here中提供了一个技巧。

我已经这样做了:

class CampusAdmin(admin.ModelAdmin):
    readonly_fields = ('gallery',)

    def gallery(self, instance):
        print 'got here'
        return '<a href="%s">%s</a>' % ('/test/url', 'Test name')

    gallery.short_description = "Gallery"
    gallery.allow_tags = True


admin.site.register(Campus, CampusAdmin)

因此,我在django admin中有可见的gallery字段,但它只是一个文本(图库名称),而不是我期望的超链接。

我检查过画廊功能实际上从未被调用过。

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

这项工作对我来说:

models.py中定义一个方法,如下所示:

class Campus(TimeStampedModel, StatusModel):
    # other fields

    gallery = models.ForeignKey(Album, editable=False, related_name='campus')

    def gallery_link(self):
        return '<a href="%s">%s</a>' % ('/test/url', 'Test name')

    gallery_link.short_description = "Gallery Link"
    gallery_link.allow_tags = True

list_display中使用admin.py

class CampusAdmin(admin.ModelAdmin):
    list_display = ('gallery_link',)

admin.site.register(Campus, CampusAdmin)

如果您想使用您的解决方案,您必须:

1 - 将def gallery更改为其他名称。

2 - 为list_display添加新名称。

class CampusAdmin(admin.ModelAdmin):
    list_display = ('gallery_link',)
    readonly_fields = ('gallery_link',)

    def gallery_link(self, instance):
        return '<a href="%s">%s</a>' % ('/test/url', 'Test name')

    gallery_link.short_description = "Gallery"
    gallery_link.allow_tags = True

admin.site.register(Campus, CampusAdmin)