2015-03-03 114 views

回答

23

你可以做到以下幾點:

models.py(例如):

model B(models.Model): 
    name = models.CharField(max_length=20) 

model A(models.Model): 
    field1 = models.CharField(max_length=20) 
    Bkey = models.ForeignKey(B) 

admin.py

from django.core import urlresolvers 

class AAdmin(admin.ModelAdmin): 
    list_display = ["field1","link_to_B"] 
    def link_to_B(self, obj): 
     link=urlresolvers.reverse("admin:yourapp_b_change", args=[obj.B.id]) #model name has to be lowercase 
     return u'<a href="%s">%s</a>' % (link,obj.B.name) 
    link_to_B.allow_tags=True 

與您的應用程序的名稱替換yourapp。

+5

萬一有人使用這個答案也一樣,你的模型在'reverse'功能是小寫。那將是:''admin:yourapp_yourmodel_change「'。 – 2016-06-04 17:15:54

+0

@RaphaëlGomès:感謝您的輸入,編輯了答案。 – 2016-06-05 05:49:42

+0

你會得到什麼錯誤? – 2016-07-15 10:21:29

2

此外接受的答案的,在Django(1.10,1.11和2.0)時,反向方法的較新版本現在是在封裝django.urls(參見this link)。

此外,您必須使用mark_safe方法在管理員中輸出HTML。所以allow_tags變得毫無用處。

最後,將鏈接添加到用戶,我在admin.py這個功能:

from django.urls import reverse 
from django.utils.safestring import mark_safe 


class ObjectAdmin(admin.ModelAdmin): 
    list_display = ('name', 'link_to_user') 

    def link_to_user(self, obj): 
     link = reverse("admin:auth_user_change", args=[obj.user.id]) 
     return mark_safe('<a href="%s">Edit %s</a>' % (link, obj.user.username)) 
    link_to_user.short_description = 'Edit user' 
+0

我建議使用['format_html'](https://docs.djangoproject .com/en/stable/ref/utils /#django.utils.html.format_html)而不是'mark_safe'。 – batisteo 2018-03-08 20:11:06