Как отображать или принимать имена вместо идентификаторов в 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)
Пожалуйста, будьте вежливы, если хотите, чтобы я улучшил свой вопрос. Я не хочу, чтобы надо мной издевались, как в прошлый раз, когда я разместил здесь вопрос. (просто начинающий разработчик)