Django admin отображение поля "многие-ко-многим" в виде ссылок

Пытаюсь заставить моего администратора Django отображать список связанных объектов в виде ссылок на эти объекты. Эти объекты связаны через отношения "многие-ко-многим".

Используя комбинацию из этого ответа и этого ответа, я пришел к следующему варианту:

class MyObject(models.Model):
    related = models.ManyToManyField(RelatedObject)

class RelatedObject(models.Model):
    name = models.CharField(max_length=191)

class MyAdmin(admin.ModelAdmin):
    list_display = ("rel")

    def rel(self, obj):
        return[self.link_to_object(related_object) for related_object in obj.related.all()]

    def link_to_object(self, obj):
        link = reverse("admin:<app>_relatedobject_change", args=[obj.id])
        return format_html(f"<a href={link}>{obj.name}</a>")

Однако, это дает мне список href, а не список ссылок.

Если я вместо этого изменю:

    def rel(self, obj):
        return self.link_to_object(obj.related.get(pk=1))

Возвращает красивую ссылку, где эта связь существует (т.е. related.get(pk=1) в obj.related.all()).

Есть ли способ заставить администратора вернуть список ссылок?

Замечу, что существует также метод linkify, но он работает только для ForeignKey, а не для many-to-many, и я не вижу, как его адаптировать.

Да, вы можете использовать list_display для отображения полей "многие ко многим" в Django Admin.

Вы можете обратиться к этому ответу.

Вернуться на верх