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.
Вы можете обратиться к этому ответу.