Django: Ссылка на ForeignKey со страницы изменений

Представьте, что есть модели:

from django.db import models


class Category(models.Model):
    name = models.CharField(...)


class Product(models.Model):
    name = models.CharField(...)
    category = models.ForeignKey(Category, ...)

Зарегистрировать модели:

from django.contrib import admin

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    fields = 'name', 'category',

Как сделать так, чтобы категория на странице изменения товара в админке была ссылкой на категорию с помощью встроенных инструментов?

P.S. Ну есть пакет django-admin-relation-links.

Django предоставляет возможность доступа к представлениям администратора с помощью системы обратного URL. Например, мы можем получить представление изменения модели автора в приложении продукта, используя reverse("admin:product_category_change", args=id). Теперь мы можем использовать этот url для гиперссылки на поле категории в ProductAdmin.

Следующий фрагмент кода в модуле admin.py делает именно то, что вы хотите сделать:

from django.contrib import admin
from django.urls import reverse
from django.utils.safestring import mark_safe

from .models import Category, Product

admin.site.register(Category)


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ('title', 'category_link',)

    def category_link(self, product):
        url = reverse("admin:{{ app_label }}_category_change", args=[product.category.id])
        link = '<a href="%s">%s</a>' % (url, product.category.name)
        return mark_safe(link)

    category_link.short_description = 'Category'
Вернуться на верх