Проблема вывода HTML в админку Django

У меня есть эти модели:

class Academic(models.Model):

    surname = models.CharField(max_length=100, blank=True)
    forename = models.CharField(max_length=100, blank=True)

    def __str__(self):
        return '{}, {}'.format(self.surname, self.forename)

class Partner(models.Model):

    name = models.CharField(max_length=200, verbose_name="Organisation name")

class ResearchActivity(models.Model):

    title = models.CharField(max_length=200)
    academic = models.ManyToManyField(Academic, blank=True)
    partner = models.ManyToManyField(Partner, blank=True)

Я хочу выводить академиков, связанных с партнером через модель ResearchActivity. У меня есть этот декоратор в моем admin.py:

@admin.register(Partner)
class PartnerAdmin(admin.ModelAdmin):

    readonly_fields = ('get_academic_links',)

    @admin.display(description='Academic link(s)')
    def get_academic_links(self, obj):
       
        for ac in ResearchActivity.objects.filter(partner=obj.id).values_list('academic', flat=True).distinct():
            return mark_safe('<a href={}>' + ac.surname + '</a>', ac)

Это вроде как работает. Если я возвращаю только ac, то я получаю ID этого академика. Я бы ожидал получить 'имя, фамилию', согласно декоратору def __str__(self):.

Более того, если я пытаюсь создать гиперссылку (см. код выше), админ выводит '-' и ничего больше. Что я упускаю?

Вот fianl-решение, которого мне удалось достичь:

@admin.display(description='Академическая ссылка(и)') def get_academic_links(self, obj):

return format_html_join(
    ', ',
    mark_safe("<a href='/admin/artsdb/academic/{}/change/' target='_blank'>{} {}</a>"),
    ((ac['academic__id'], ac['academic__forename'], ac['academic__surname']) for ac in ResearchActivity.objects.filter(partner=obj.id).values('academic__forename', 'academic__surname', 'academic__id').distinct())
    )

Я хотел бы наконец сгруппировать академиков по ResearchActivity, но не могу понять, как это сделать. Если я изменяю queryset на ResearchActivity.objects.filter(partner=obj.id), а затем обращаюсь к ac.academic, у меня нет никакого ввода.

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