2017-03-08 29 views
0

在我的django網站中,我有諸如'project_list'和'project_detail'之類的頁面。每個項目都有具有不同角色的成員(開發者,經理,e.t.c)。我想根據當前用戶在模板中項目中的角色顯示不同的按鈕。我需要如何實現它的想法。比方說類似的東西在模板:確定用戶在項目中的角色

{%如果request.user.role_in_the_current_project = '經理' %} 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'), 
] 

回答

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子元組的第二個值,而第一個是將在用戶如果顯示被你使用的功能get_role_display()

+0

嗯,我知道了。我需要幫助實現。正如您在模特會員中看到的,我有角色領域和選擇概念。現在我稍微用project_detail視圖來表達請求用戶在該項目中的角色。 –

+0

我在模板中使用了它,但它並沒有幫助'{%if request.user.project.membership__role =='manager'%} {%endif%}'您有任何其他想法嗎? –

+0

Just {%if request.user.role ='Manager'%} does not work。所以傷心=( –

0

好吧,畢竟我發現了妄想。鑑於我補充一下:

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

然後在模板我添加:

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

很高興你知道了!我停電了,沒有想清楚。我想我需要一些睡眠。快樂的編碼! –

相關問題