Django-admin:如何在记录变更列表中显示对象信息页面的链接而非编辑表单?
我正在为我正在开发的一个应用程序定制Django-admin。目前定制的部分运行得不错,我添加了一些视图。但我想知道如何将记录链接在更改列表中改成显示一个信息页面,而不是显示更改表单?
在这篇博客文章中:http://www.theotherblog.com/Articles/2009/06/02/,Tom提到:
“你可以通过定义一个函数来在列表视图中添加图片或链接,然后设置 my_func.allow_tags = True。”
但我对此并没有完全理解!!
现在我有一个个人资料函数,我希望当我点击记录列表中的某个成员时,可以显示该成员的资料(或者添加一个叫做“个人资料”的按钮),另外还想为每个成员添加一个链接(编辑:可以让我跳转到该成员的编辑表单)。
我该如何实现呢?
2 个回答
10
看看这个链接: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')
那么你就完成了
23
如果我理解你的问题没错的话,你是想在列表视图中添加一个自己的链接,并且希望这个链接指向你创建的某个信息页面。
要做到这一点,你需要在你的管理对象中创建一个函数,用来返回链接的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)