2015-10-19 83 views
0

我正在構建一個項目,您可以在其中創建和加入組。然而,我似乎無法弄清楚如何顯示加入按鈕的邏輯,如果用戶沒有加入,並且如果他們有,則不加入。我附加了模型和group.html頁面。請讓我知道如何在group.html文件中執行此操作。Python如何檢查用戶是否在組中查看頁面

謝謝。

models.py

from django.db import models 

class User(models.Model): 
    first_name = models.TextField(blank=False, max_length=20) 
    last_name = models.TextField(blank=False, max_length=20) 
    email = models.TextField(blank=False, max_length=20) 
    password = models.TextField(blank=False, max_length=20) 
    counter = models.IntegerField(blank=False, null=True) 

class Group(models.Model): 
    name = models.TextField(blank=False, max_length=50) 
    description = models.TextField(blank=False, max_length=200) 
    created_at = models.DateField() 
    updated_at = models.DateField() 
    creator = models.ForeignKey(User, related_name="creator") 
    members = models.ManyToManyField(User, related_name="members") 
    counter = models.IntegerField(blank=False, null=True) 
    class Meta: 
     db_table = 'groups' 

groups.html

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <title>On Group {{group.id}}</title> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> 
</head> 
<body> 
<div class="container"> 
<br> 
    <a href="/logout">Logout</a> 
    <span>|</span> 
    <a href="/dashboard">Dashboard</a> 
     <form action="/leave" method="post"> 
     {%csrf_token %} 
     <input type="hidden" name="user_id" value="{{ request.session.user_id }}"> 
     <input type="hidden" name="group_id" value="{{ group.id }}"> 
     <input type="submit" value="Leave"> 
     </form> 
     <form action="/join" method="post"> 
     {%csrf_token %} 
     <input type="hidden" name="user_id" value="{{ request.session.user_id }}"> 
     <input type="hidden" name="group_id" value="{{ group.id }}"> 
     <input type="submit" value="Join"> 
     </form> 
    <table class="table class table-striped table-bordered table-hovered table-hover"> 
     <thead> 
      <tr> 
       <th>Group Name</th> 
       <th>Group Description</th> 
       <th>Group Members</th> 
       <th>Group Creator</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr> 
       <td>{{group.name }}</a></td> 
       <td>{{group.description}}</td> 
       <td>{{group.members.count}}</td> 
      {% if group.creator.id == request.session.user_id %} 
       <td>You</td> 
      {% else %} 
       <td>{{group.creator.first_name}}</td> 
      {% endif %} 
      </tr> 
     </tbody> 
    </table> 
    <h4>Members</h4> 
    <table class="table class table-striped table-bordered table-hovered table-hover"> 
     <thead> 
      <tr> 
       <th>Member First Name</th> 
       <th>Member Last Name</th> 
      </tr> 
     </thead> 
     <tbody> 
     {% for member in group.members.all %} 
      <tr> 
       <td>{{member.first_name}}</td> 
       <td>{{member.last_name}}</td> 
      </tr> 
     {% endfor %} 
     </tbody> 
    </table> 
</div> 
</body> 
</html> 
+0

什麼是可變成員?一個元組?一個列表?一個字符串? –

+2

這是我猜的QuerySet。 –

回答

3

您可以在您的應用程序文件夾中做一個過濾器一樣,templatetags文件夾下:

from django import template 
register = template.Library() 

@register.filter 
def has_group(user, group_name): 
    return user.groups.filter(name=group_name).exists() 

而在你的模板例如:

{% if user|has_group:'groupName' %} 
    <button></button> 
{% else %} 
    <p> Not in group </p> 
{% endif %} 

希望這會有所幫助。
編輯: 我可以問一個可能對您有幫助的問題。你爲什麼不使用django.auth提供的用戶模型?

+0

如果我知道小組的名字,這不就行嗎?我需要它爲所有可能存在的組織工作。 –

+1

如果你有組的編號,你可以做同樣的事情。你只需要稍微改變過濾器。您可以將組的完整查詢集作爲參數傳遞,並在應用過濾器的所有組上循環。 –

+1

如果我不清楚,我可以根據你的代碼編寫一些可能工作的東西。 –

相關問題