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'