Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?

Posted

技术标签:

【中文标题】Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?【英文标题】:Django-admin : How to display link to object info page instead of edit form , in records change list? 【发布时间】:2010-11-13 10:36:26 【问题描述】:

我正在为正在开发的应用程序自定义 Django-admin。所以 到目前为止,定制是工作文件,添加了一些视图。但我是 想知道如何将 change_list 显示中的记录链接更改为 显示信息页面而不是更改表单?!

在这篇博文中:http://www.theotherblog.com/Articles/2009/06/02/ 扩展-the-django-admin-interface/ Tom 说:

" 您可以通过定义 函数然后添加 my_func.allow_tags = True "

我没有完全理解!

现在我有配置文件功能,当我点击一个时我需要它 记录列表中的成员我可以显示它(或添加另一个按钮 称为-个人资料-),以及如何为每个成员添加链接(编辑: 将我重定向到此成员的编辑表单)。

我怎样才能做到这一点?!

【问题讨论】:

【参考方案1】:

如果我理解您的问题,您想将自己的链接添加到列表视图,并且您希望该链接指向您创建的某个信息页面。

为此,请创建一个函数以在 Admin 对象中返回链接 html。然后在您的列表中使用该功能。像这样:

class ModelAdmin(admin.ModelAdmin):
    def view_link(self):
        return u"<a href='view/%d/'>View</a>" % self.id
    view_link.short_description = ''
    view_link.allow_tags = True
    list_display = ('id', view_link)

【讨论】:

谢谢,这就是我要找的东西:D 谢谢...不得不做一个小修改:def view_link(self, obj): 请注意,在 Django 2+ 中,不再支持 allow_tags。而是将返回的字符串包装在来自django.utils.safestringmark_safe() 中。【参考方案2】:

看一下:http://docs.djangoproject.com/en/dev/ref/contrib/admin/,ModelAdmin.list_display 部分,它说:表示模型属性的字符串。这与可调用的行为几乎相同,但在这种情况下 self 是模型实例。这是一个完整的模型示例:

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    color_code = models.CharField(max_length=6)

def colored_name(self):
    return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name)
colored_name.allow_tags = True

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name')

所以我猜,如果你将这两个方法添加到 Person 中

def get_absolute_url(self):
    return '/profiles/%s/' % (self.id)

def profile_link(self):
    return '<a href="%s">%s</a>' % (self.get_absolute_url(), self.username)
profile_link.allow_tags = True

并将 PersonAdmin 更改为

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name', 'profile_link')

那么你就完成了

【讨论】:

以上是关于Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?的主要内容,如果未能解决你的问题,请参考以下文章

django-admin配置文件

Django admin - 在显示的用户列表中添加一个字段

如何在django-admin中隐藏特定记录的字段?

django-admin:添加额外的行总计

如何更改组合框选定值的显示顺序

在 django-admin 中更新记录的问题