Django - Различные типы пользователей в DetailView

У меня есть два типа пользователей: Покупатель и Торговец, и я хочу отображать на странице детали выбранного пользователя, но представление деталей может использовать только одну модель

Мои модели

class User(AbstractUser):
    is_buyer = models.BooleanField(default=False)
    is_merchant = models.BooleanField(default=False)
    is_moderator = models.BooleanField(default=False)
    pgp = models.CharField(max_length=150, blank=True)
    date_created = models.DateTimeField(default=timezone.now)


class Merchant(models.Model):  # items
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)

    def __str__(self):
        return f'{self.user.username}'


class Buyer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    pin = models.CharField(max_length=6, blank=True)

    def __str__(self):
        return f'{self.user.username}'


Мои взгляды

class ProfileDetailView(DetailView):
    model = User
    template_name = 'users/profile.html'
    slug_field = 'username'
    slug_url_kwarg = 'username'

Мой шаблон и url

{% extends 'base.html' %}

{% block content %}

    <article>
        <div>
            <p>{{ object.pgp }}</p>
        </div>
    </article>

{% endblock %}


path('profile/<str:username>', usersViews.ProfileDetailView.as_view(), name='user-profile'),

В шаблоне работает только object.username, если я пытаюсь использовать другие имена, оно не отображается. Что мне делать? Создать другую модель Profile? Изменить текущее представление или модель?

Edit: Я создал модель профиля

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    buyer = models.OneToOneField(Buyer, on_delete=models.CASCADE)
    merchant = models.OneToOneField(Merchant, on_delete=models.CASCADE)

    def __str__(self):
        return self.user.username

но затем в представлении 2 переменные slug

slug_field = 'User.username' 
slug_url_kwarg = 'User.username'

вызвана ошибка Generic detail view must be called with either an object pk or a slug

Поскольку между Пользователем, Продавцом и Покупателем существует связь один-к-одному, вы можете получить доступ к обоим в вашем шаблоне:

{{ obj.merchant }}
# or
{{ obj.buyer }}

Затем вы можете получить доступ к свойствам Merchant/Buyer:

{{ obj.merchant.some_property }}
Вернуться на верх