2016-05-14 55 views
1

如果有兩個型號將外鍵記錄鏈接到它在Django Admin中的詳細視圖?

models.py

class ModelA(models.Model): 
    pass 

class ModelB(models.Model): 
    a = models.ForeignKey(ModelA, null=True) 

admin.py

class ModelBAdmin(admin.ModelAdmin): 
    list_display = ('id', 'a',) 
    list_display_links = None 
    ordering = ('-id',) 

admin.site.register(ModelB, ModelBAdmin) 


class ModelAAdmin(admin.ModelAdmin): 
    list_display = ('id',) 
    list_display_links = None 

admin.site.register(ModelA, ModelAAdmin) 

有沒有辦法在列表視圖,其詳細視圖鏈接aModelB?如果沒有,那麼我們可以在ModelB的詳細視圖中做同樣的事情嗎?也就是說,顯示a作爲其詳細視圖的鏈接?

目前處於列表視圖ModelB只有idModelA。要查看其詳細信息,我必須去ModelA列表視圖並搜索該ID。在ModelB列表視圖我想id指向的a(如/admin/ModelA/{a.id})

回答

2

列表視圖中的字段詳細視圖可以可調用,所以你可以這樣做:

from django.core.urlresolvers import reverse 

class ModelBAdmin(admin.ModelAdmin): 
    list_display = ('id', 'a_link',) 
    list_display_links = None 
    ordering = ('-id',) 

    def a_link(obj): 
     return format_html('<a href="{}">{}</a>', reverse(
      'admin:myapp_a_change', args=[obj.a.id]), obj.a.name) 
    a_link.short_description = "Model A Details" 

admin.site.register(ModelB, ModelBAdmin) 
+0

「admin:myapp_a_change」中的'a'是什麼?我爲我的模型類class MyModelClass(models.Model)嘗試了'admin_MyModelClass_change'和'admin_my_model_class_change'',但每次都說沒有發現反向匹配。 –

+0

感謝您的「字段可以調用」,但。我記得在某個地方讀它,完全忘了它。 –

+0

「a」應該是您模型的名稱。從ModelA進入管理員,url應該是mysite/admin/myapp/the_class_name_you_need_to_use – evergreen