В списке администраторов Django свяжите модель, которая не имеет отношения к объекту

У меня есть две модели, которые не имеют внешнего ключа в качестве отношения, но имеют общий столбец имени пользователя.

class User(models.Model):
    password = models.CharField(max_length=255)
    email = models.EmailField(unique=True, blank=True)
    username = models.CharField(max_length=255)


class SessionUser(models.Model):
   username = models.CharField(max_length=255)
   last_login = models.DateTimeField(auto_now=True)

Я хотел вывести список всех пользователей в админке Django и при нажатии на отдельный объект вывести список всех сессий пользователя. Как мы можем связать объект, который не имеет связи по главному ключу?

Я думаю, что отсутствие внешнего ключа не является хорошей идеей, так как есть вероятность, что некоторые имена пользователей будут похожи, чтобы избежать этого, unique=True необходимо добавить условие.

Сделать username поле модели уникальным в User model.

и добавить метод session_users в list_display класса UserAdmin

from django.utils.html import format_html

class UserAdmin(admin.Modeladmin):
    # your user_admin model class
    list_display = ['other_model_fields', 'session_users']
    ...
    ...
    def session_users(self, obj):
        redirect_url = ("%s?username=%s") % (reverse('admin:<app_name>_sessionuser_changelist'), obj.username)
        return format_html('<a class="button" href="{}">Add/View</a>', redirect_url)

Это будет перенаправление с отфильтрованными данными модели SessionUser model-admin.

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