Детали модели сотрудника не отображаются в навигационной панели в шаблоне django
У меня проблема с отображением имени и фотографии моего сотрудника в navbar.html
У меня есть модель CustomUser из учетных записей, структура приложения следующая
core
|_accounts
|_models.py (CustomUser is in here)
|
|_employees
|_models.py (Employee model in here)
Мой пользователь CustomUser выглядит следующим образом
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
и моя модель сотрудника
class Employee(models.Model):
# PERSONAL DATA
user = models.ForeignKey(User,on_delete=models.CASCADE, related_name="employees")
title = models.CharField(_('Title'), max_length=10, default='Mr', choices=TITLE, blank=False, null=True)
image = models.ImageField(_('Profile Image'), upload_to='avatars/', blank=True, null=True, help_text='upload image < 2.0MB')#work on path username-date/image
firstname = models.CharField(_('Firstname'), max_length=125, null=False, blank=False)
lastname = models.CharField(_('Lastname'), max_length=125, null=False, blank=False)
В моем шаблоне navbar у меня есть
<img alt="image" src="{{ request.user.employees.image.url }}" class="user-img-radious-style">
и
<div class="dropdown-title">Hello {{ request.user.firstname }}</div>
Мой шаблон не показывает желаемых результатов
Прежде всего, ваше поле пользователя должно быть связано с классом CustomUser
, а не с классом User
.
Кроме того, request.user
даст вам экземпляр вашей AUTH_USER_MODEL
настройки в settings.py, который в вашем случае является экземпляром CustomUser
модели, у экземпляра которой нет firstname
поля.
AbstractBaseUser
не поставляется с полями first_name
, last_name
, вместо этого вы можете переключить наследование на AbstractUser
и тогда ваш класс CustomUser
будет автоматически наследовать first_name
и last_name
.
Или, как предложил @Ankit, вы можете получить Employee
имя, выполнив request.user.employee.firstname
Помните, что ваши отношения должны быть OneToOne, как предложил @Iain.