Django 2.1链接作为DjangoAdmin列表中的字段

时间:2018-10-03 14:02:59

标签: python django django-admin

我已经阅读了有关此问题的所有问题,但不幸的是,没有一个问题对我有用。

我的目标是在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

但是它仍在转义这些内容并将其显示为纯文本。

Devicesdevice_set模型的Machine。 1机器:N个设备关系。

根据我在这里阅读的内容,即使在使用allow_tags=True时没有format_html,它也应该可以正常工作。

这是行不通的,因为内部函数devices中没有format_html吗?如果没有,有人知道如何解决吗?

2 个答案:

答案 0 :(得分:1)

在Django 2.0中,对ModelAdmin方法中allow_tags的支持为removed

  

将删除对ModelAdmin方法上allow_tags属性的支持。

似乎您将改为使用mark_safe

return mark_safe(devices_with_links)

答案 1 :(得分:0)

没关系,我只是通过更改来解决了

return devices_with_links

return mark_safe(devices_with_links)