2016-05-14 56 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