2014-11-01 112 views
1

有像后续的事情我有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管理,但它只是一个文本(库名)不是超链接,因为我希望是。

画廊功能实际上从来没有被调用,因为我检查。

有谁知道我做错了什么?

回答

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_displayadmin.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) 
+0

太棒了!这工作,谢谢。你知道我的版本为什么不起作用吗?是否因为我已经定义了gallery字段并且该函数被覆盖/绕过? – 2014-11-01 21:16:04

+0

@ Arek_24检查我的编辑以找到答案。 – 2014-11-01 21:35:12