@nurzhannogerbek

Как вывести что либо в template в зависимости от значения поля модели (сhoices)?

Столкнулся со следующей проблемой. На сайте есть две страницы: 'project_list'(Страница со списком проектов) и 'project_detail'(Страница с детальной информацией о проекте). В каждом проекте есть члены команды(пользователи) с разными ролями в данном конкретном проекте (Например: manager, developer и т. п.). Как вывести в template(в project_detail) что либо в зависимости от роли текущего пользователя в данном проекте. Например, если текущий пользователь в данном конкретном проекте manager показать кнопку, если developer то текстовое сообщение. Модель выглядит следующим образом:

models.py
class Project(models.Model):
    name = models.CharField(max_length=250,)
    slug = models.SlugField(max_length=250, unique_for_date='publication_date',)
    *Other fields*

    def get_absolute_url(self):
        return reverse('project:project_detail', args=[self.slug])

class Membership (models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    project = models.ForeignKey(Project, on_delete=models.CASCADE)

    ROLE_CHOICES = (
        ('manager', 'Manager'),
        ('developer', 'Developer'),
        ('business_analyst', 'Business analyst'),
        ('system_analysts', 'System analysts'),
    )

    role = models.CharField(max_length=20, choices=ROLE_CHOICES,)


view.py
def project_detail(request, slug):
    project = get_object_or_404(Project, slug=slug, status='public')
    return render(request, 'project/project_detail.html', {'project': project,})


urls.py
urlpatterns = [
    url(r'^project/(?P<slug>[-\w]+)/$', project_detail, name='project_detail'),
]


detail.html
{% block content %}
   <h1>{{ project.name }}</h1>
   <p>{{ project.description|linebreaks }}</p>

  <!--НЕ РАБОТАЕТ-->
  {% if request.user.project.membership__role == 'manager' %}
      <button>Create</button>
   {% endif %}
{%endblock %}
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ответы на вопрос 1
{% for user in request.user.membership_set.all %}
  {{user.role}}
{% endfor %}


если бы ты использовал OneToOneField
class Membership(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ROLE_CHOICES = (
        ('manager', 'Manager'),
        ('developer', 'Developer'),
        ('business_analyst', 'Business analyst'),
        ('system_analysts', 'System analysts'),
    )
    role = models.CharField(max_length=20, choices=ROLE_CHOICES,)

то можно было
{{request.user.membership.role}}
так обращаться
Ответ написан
Ваш ответ на вопрос

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

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