django admin:如何在change_form.html中创建一个只读的url字段?

San*_*its 17 python django django-admin

我想在change_form页面上的admin中单击一个只读URL字段.我尝试了一个小部件,但很快就意识到小部件仅用于表单字段.所以,在我尝试用jQuery解决这个问题之前(查找和替换或者其他东西),我想知道在python中是否有更优雅的解决方案.有任何想法吗?

okm*_*okm 17

老问题,但仍然值得回答.

参考文档, readonly_fields现在也支持那些自定义方式,就像评论中发布的链接一样:

def the_callable(obj):
    return u'<a href="#">link from the callable for {0}</a>'.format(obj)
the_callable.allow_tags = True

class SomeAdmin(admin.ModelAdmin):
    def the_method_in_modeladmin(self, obj):
         return u'<a href="#">link from the method of modeladmin for {0}</a>'.format(obj)
    the_method_in_modeladmin.allow_tags = True

    readonly_fields = (the_callable, 'the_method_in_modeladmin', 'the_callable_on_object')

ObjModel.the_callable_on_object = lambda self, obj: u'<a href="#">link from the callable of the instance </a>'.format(obj)
ObjModel.the_callable_on_object.__func__.allow_tags = True
Run Code Online (Sandbox Code Playgroud)

上面的代码将在其更改表单页面中呈现三个只读字段.

  • 这是一个很好的教学示例,应将其标记为答案。也许值得一开始做一个简短的序言,以便清楚地表明您正在展示实现同一件事的三种不同方法。但是好东西。谢谢。 (2认同)

rar*_*iru 11

更新的答案可以在这篇文章中找到。

它使用该format_html 实用程序,因为allow_tags已被弃用。

ModelAdmin.readonly_fields的文档也非常有帮助。

from django.utils.html import format_html
from django.contrib import admin

class SomeAdmin(admin.ModelAdmin):
    readonly_fields = ('my_clickable_link',)

    def my_clickable_link(self, instance):
        return format_html(
            '<a href="{0}" target="_blank">{1}</a>',
            instance.<link-field>,
            instance.<link-field>,
        )

    my_clickable_link.short_description = "Click Me"
Run Code Online (Sandbox Code Playgroud)