Как сделать admin change_view с полем кликабельной ссылки на объект - PullRequest
0 голосов
/ 04 декабря 2018

Как сделать admin change_view с полем кликабельной ссылки на объект пользователя или любого другого?
Как: <a href="/admin/user/{{owner.id}}/change">{{owner.fullname}}</a>

В настоящее время существует только простой текст с идентификатором.

from django.contrib import admin
from django.contrib.auth.models import User
from django.db import models


class Car(models.Model):
    owner = models.ForeignKey(User, related_name="cars", null=True, blank=True)

class CarAdmin(admin.ModelAdmin):
    pass


admin.site.register(Car, CarAdmin)

Найдено много примеров для list_view, но не для change_view.

UPD: Попытка добавить следующий метод в CarAdmin, но это не помогло.

from django.utils.html import format_html


class CarAdmin(admin.ModelAdmin):

    def owner_change_url(self, obj):
        return format_html('<a href="/admin/base/user/%s/change/">%s</a>' % (obj.owner.id, obj.owner.full_name))
    owner_change_url.short_description = 'Owner'

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете создать поле только для чтения , которое ссылается на вашего пользователя.Внутри вашего CarAdmin класса:

from django.utils.safestring import mark_safe

class CarAdmin(admin.ModelAdmin):

    readonly_fields = ('user_link', )

    @mark_safe
    def user_link(self, car):
        url = reverse('admin:user_user_change', args=(car.owner.id, ))
        return '<a href="{url}">{user}</a>'.format(
             url=url, 
             user=car.owner.fullname
        )

    user_link.short_description = "Edit car owner"
...