确定用户在项目中的角色

时间:2017-03-08 15:20:20

标签: python django python-3.x django-templates django-views

在我的django网站上,我有像“项目列表”这样的页面。和' project_detail'。每个项目都有不同角色的成员(开发人员,经理,e.t.c。)。我想显示不同的按钮,具体取决于当前用户在模板中的项目中的角色。我需要想法如何实现它。让我们在模板中说出类似的内容:

{%if request.user.role_in_the_current_project =' manager' %}    SOW SOMETHING {%endif%}

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,})

project_detail.html

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

urls.py

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

2 个答案:

答案 0 :(得分:0)

您可以在模型字段中使用choices的概念,然后使用这些概念,您可以在模板(或视图)中做出决策,以显示适当的内容。

如果您需要更多相关信息,请与我们联系。

[编辑]:所以,你想要的是每次检查role的值。正确?

views.py写:

project = get_object_or_404(Project, slug=slug, status='public')
memberships = project.membership_set.all()

然后,因为一个项目可以包含许多Membership条记录,您应该遍历memberships,以便每次都获得role

所以,在你的模板中:

{% for membership in memberships %}
    {% if membership.role == 'Manager' %} Do stuff here {% endif %}
{% endfor %}

请注意,.role将返回大写的ROLE_CHOICES子元组的第二个值,而第一个值将在用户显示的情况下使用函数{{ 3}}

答案 1 :(得分:0)

好吧,毕竟我发现了呕吐。在视图中我添加:

is_manager = project.membership_set.filter(user=request.user, role='Manager').exists()

然后在模板中添加:

{% if is_manager %}
    <button>Create</button>
{% endif %}