2015-10-19 78 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

如果我不清楚,我可以根据你的代码编写一些可能工作的东西。 –

相关问题