Администратор django: как сделать поле URL, доступное только для чтения, кликабельным в файле change_form.html? - PullRequest
16 голосов
/ 22 февраля 2011

Я хочу, чтобы поле URL, доступное только для чтения, можно было щелкать в администраторе на странице change_form.Я попробовал виджет, но вскоре понял, что виджеты предназначены только для полей формы.Итак, прежде чем я попытаюсь решить эту проблему с помощью jQuery (найти и заменить или что-то в этом роде), я хотел бы узнать, есть ли более элегантное решение для этого в python.Есть идеи?

Ответы [ 3 ]

16 голосов
/ 28 марта 2013

Старый вопрос, но все же заслуживает ответа.

Ссылка на документ , 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

Приведенный выше код отобразит три поля только для чтения на своей странице формы изменений.

2 голосов
/ 27 сентября 2017

Обновленный ответ можно найти в этом посте .

Используется утилита 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"
2 голосов
/ 05 августа 2014

Я перешел по ссылке, предоставленной okm, и мне удалось включить кликабельную ссылку на странице формы изменений.

Мое решение (Добавить в admin.ModelAdmin, НЕ models.model)

readonly_fields = ('show_url',)
fields = ('show_url',)

def show_url(self, instance):
    return '<a href="%s">%s</a>' % ('ACTUAL_URL' + CUSTOM_VARIABLE, 'URL_DISPLAY_STRING')
show_url.short_description = 'URL_LABEL'
show_url.allow_tags = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...