Skip to main content
 首页 » 编程设计

python之将外键记录链接到 Django Admin 中的详细 View

2024年10月24日31qq78292959

如果有两个模型

模型.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) 

有没有办法将 a 与其在 ModelB 的 ListView 中的详细 View 链接起来?如果没有,那么我们可以在 ModelB 的详细 View 中做同样的事情吗?也就是说,将 a 显示为其详细 View 的链接?

目前在 ModelB 的 ListView 中只有 ModelA 的 id。要查看其详细信息,我必须转到 ModelA ListView 并搜索 id。我希望 ModelB ListView 中的 id 指向 a 的详细 View (如/admin/ModelA/{a.id})

请您参考如下方法:

ListView 中的字段可以是可调用的,因此您可以这样做:

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)