@Lepilov

Как выводить в темплейт обратные связи в моделях django?

Есть связанные модели:

class Employee(models.Model):
    """Employee information."""
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='employee', unique=True)
    position = models.CharField("current position in a company", max_length=64, blank=True)
    birth_date = models.DateField("date of birth", null=True)
    skills = models.ManyToManyField(
        Technology, through="Skill", verbose_name="skills", blank=True)


class Technology(models.Model):
    """Technologies."""
    name = models.CharField('technology name', max_length=32, unique=True)


class Skill(models.Model):
    """Information about an employee's skills."""
    LEVELS = (
        ('basic', 'Basic'),
        ('intermediate', 'Intermediate'),
        ('advanced', 'Advanced'),
        ('expert', 'Expert'),
    )
    employee = models.ForeignKey(
        Employee, on_delete=models.CASCADE, related_name="employee_skills")
    technology = models.ForeignKey(Technology, on_delete=models.CASCADE)
    start_date = models.DateField(
        verbose_name='Works with since:')
    level = models.CharField("level", max_length=64, choices=LEVELS)


У меня несколько вопросов по выводу в шаблон информации по ним
1. Пробую через модель User вывести общую инфу по Employee

template.html

{% if request.user.is_authenticated %}
    {{ user.get_full_name }}
    {{ user.employee.position }}
{% endif %}


Первое выражение - получение имени работает, а вот со вторым проблема - не выводится ничего. related_name='employee' - добавлено. Пробую через {{ user.employee_set.position }} - тоже без результата.

И второй вопрос - вывод Skills

Делаю по той же схеме:

{% for i in  user.employee.employee_skills %}
     {{ i.technology }}
{% endfor %}

и ничего.
Я могу вывести эти данные и через вьюхи

class AccountView(TemplateView):

    template_name = "profile.html"

    def get_context_data(self, **kwargs):
        context = super(AccountView, self).get_context_data(**kwargs)
        context['skills'] = Skill.objects.filter(employee__user = self.request.user)
        return context


И это работает, но хочу разобраться как получать доступ через User.
Помогите разобраться пожалуйста!
  • Вопрос задан
  • 320 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
{% for i in user.employee.skills.all %}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы