Детали модели сотрудника не отображаются в навигационной панели в шаблоне 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.

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