2014-11-01 139 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