我正在尝试改变django管理列表中的一个对象的链接。以下是我目前所做的:
class FooModelAdmin(admin.ModelAdmin):
fields = ('foo','bar')
list_display = ('foo_link','bar')
def foo_link(self,obj):
return u'<a href="/foos/%s/">%s</a>' % (obj.foo,obj)
domain_link.allow_tags = True
domain_link.short_description = "foo"
这在原始列表显示链接内产生另一链接,例如
<a href="/admin/app/model/pk/"><a href="/foos/foo/">Foo</a></a>
7条答案
按热度按时间zbwhf8kr1#
解决方案是覆盖init并将list_display_links设置为None,例如
eimct9ow2#
我相信正确的方法是子类化ChangeList并覆盖url_for_result方法来创建您想要的正确的更改URL。
重写admin.ModelAdmin子类中的get_changelist以返回新类:
fv2wmkja3#
默认情况下,列表显示的第一列将链接到管理员编辑页面。如果您希望另一列或多列成为该链接,一个非常简单的方法如下:
如果
foo_link
不是模型的属性,则它应该是如下所示的可调用对象:我的项目中的一个完整示例:
yfwxisqw4#
这里是Django 3.1文档中
ModelAdmin
选项ModelAdmin.list_display_links
的链接。lrpiutwd5#
在我自己遵循了这个想法(从列表显示链接到实际页面)之后,我有了第二个想法。有两个页面需要考虑:模型的管理页面和模型的实际公共页面(可能是细节视图)。如果你从管理页面链接到公共页面(即使它是一个CMS页面),你就失去了与管理页面的连接。
模型的管理页面实际上是通过“Preview”链接(通常位于右上角)链接到公共页面的,这个链接来自
model_object.get_absolute_url()
。所以,如果你想改变预览链接指向的位置,你只需要覆盖
get_absolute_url()
,在这种情况下,你这样做可能是一件好事,因为你可能也想在所有其他地方使用这个url。4jb9z9bj6#
你需要重写模板,因为链接是在那里 Package 的。看看Edit Django User admin template。
vom3gejh7#
我需要这样的东西为一个项目。这是我的解决方案,以生成可点击的参考