Ссылка на Django 2.1 как поле в списке DjangoAdmin - PullRequest
0 голосов
/ 03 октября 2018

Я прочитал все вопросы здесь относительно этой проблемы, но, к сожалению, ни один из них не работает для меня.

Моя цель - показать пользовательский столбец в Django Admin ModelAdmin в виде ссылки HTTP (тег <a>)).

admin.py

def device_url(dev_id, dev_name):
    html = '/v1/admin/devices/device/{}/change/'.format(dev_id)
    return format_html('<a href="{0}">{1}</a>', html, dev_name)

@admin.register(Machine)
class MachineAdmin(admin.ModelAdmin):
    form = MachineForm
    list_display = ('name', 'location', 'devices', 'last_maintenance_log')
    inlines = [CommentInline, ]

    def devices(self, obj):
        devices_with_links = ', '.join([device_url(d.id, d.name) for d in obj.devices.all()])
        if len(devices_with_links) > 1:
            return devices_with_links
        else:
            return '-'

    devices.allow_tags = True

Но он по-прежнему избегает тех и показывает его в виде открытого текста.

Devices - device_set из Machine модели,1 Machine: N Devices Relations.

Согласно тому, что я прочитал здесь, оно должно работать, даже без allow_tags=True при использовании format_html.

Это не работает, потому чтоУ меня нет format_html во внутренней функции devices?Если нет, у кого-нибудь есть идеи, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

В Django 2.0 поддержка allow_tags в методах ModelAdmin была удалена :

Поддержка атрибута allow_tags в методах ModelAdmin будет удалена.

Кажется, вместо этого вы захотите использовать mark_safe :

return mark_safe(devices_with_links)
0 голосов
/ 03 октября 2018

Неважно, я просто решил это, изменив

return devices_with_links

на

return mark_safe(devices_with_links)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...