В списке администраторов 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.