Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django admin: how to make a readonly url field clickable in change_form.html?

Tags:

I want to make a readonly URL field clickable in the admin on a change_form page. I tried a widget, but soon realized widgets are for form fields only. So, before I try to solve this problem with jQuery (find and replace or something), I would like to know if there is a more elegant solution for this in python. Any ideas?

like image 429
Sander Smits Avatar asked Feb 21 '11 22:02

Sander Smits


2 Answers

Old question, but still deserves an answer.

Ref the doc, readonly_fields also supports those customization ways now, works just as the link posted in the comment:

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 

The above code would render three readonly fields in its change form page then.

like image 199
okm Avatar answered Oct 24 '22 08:10

okm


The updated answer can be found in this post.

It uses the format_html utility because allow_tags has been deprecated.

Also the docs for ModelAdmin.readonly_fields are really helpful.

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" 
like image 40
raratiru Avatar answered Oct 24 '22 08:10

raratiru