Как отображать или принимать имена вместо идентификаторов в Django Superadmin при использовании GenericFroeignKey

У меня есть модель для моего проекта, которая использует GenricFroeignKeys для добавления заинтересованных лиц в проекты и репозитории. Модель такова

from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType


class StakeHolder(models.Model):
    """Model class for Stakeholders of Project and Repos"""

    name = models.TextField()
    email = models.EmailField()

    def __str__(self):
        return self.name


class Role(models.Model):
    """This is the model for Role that the stakeholders will have o projects and repos"""
    name = models.TextField()

    def __str__(self):
        return self.name


class ProjectRepoStakeHolder(models.Model):
    """This is a generic models used to define stakeholders on project and repos"""

    stake_holder = models.ForeignKey(StakeHolder, on_delete=models.CASCADE)
    role = models.ForeignKey(Role, on_delete=models.CASCADE)

    limit = models.Q(app_label='pr_reviews', model='repository') | \
            models.Q(app_label='pr_reviews', model='project')

    # Fields that are mandatory for generic relations
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, limit_choices_to=limit,)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

    def __str__(self):
        return self.stake_holder.name + "/" + self.role.name + "/" + self.content_object.name


class Project(models.Model):
    """Model class for Project"""

    name = models.TextField(unique=True, blank=False, null=False)
    uuid = models.UUIDField(unique=True, blank=False, null=False)
    is_active = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name


class Repository(models.Model):
    """Model class for Repository"""

    project = models.ForeignKey(Project, on_delete=models.CASCADE, blank=False, null=False)
    name = models.TextField(unique=True, blank=False, null=False)
    uuid = models.UUIDField(blank=False, null=False)
    is_active = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


    def __str__(self):
        return self.name

Теперь, если мне нужно добавить заинтересованную сторону в проект или репозиторий, я должен сделать это, передавая object_id (pk проекта или репозитория)

Как на этом изображении. Мне нужно передать идентификатор объекта репозитория или проекта

Есть ли способ добавить заинтересованных лиц в проект или репозиторий, используя их имена, без необходимости изменять pks проекта и репозитория? (Подобно тому, как superadmin работает с добавлением отношений FroeigKey с помощью выпадающего списка). Просто вот так (для справки)

Ниже представлен мой файл admin.py

from django.contrib import admin
from pr_reviews.models import Project, Repository, Role, ProjectRepoStakeHolder, StakeHolder


class ProjectAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'is_active')


class RepoAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'is_active', 'project')


class ProjectRepoStakeholderAdmin(admin.ModelAdmin):
    list_display = ('stake_holder', 'role', 'content_object', 'content_type')


admin.site.register(Project, ProjectAdmin)
admin.site.register(Repository, RepoAdmin)
admin.site.register(ProjectRepoStakeHolder, ProjectRepoStakeholderAdmin)
admin.site.register(Role)
admin.site.register(StakeHolder)

Пожалуйста, будьте вежливы, если хотите, чтобы я улучшил свой вопрос. Я не хочу, чтобы надо мной издевались, как в прошлый раз, когда я разместил здесь вопрос. (просто начинающий разработчик)

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