Python如何在查看页面中检查用户是否在组中

Python如何在查看页面中检查用户是否在组中,python,django,Python,Django,我正在创建一个项目,您可以在其中创建和加入组。然而,我似乎无法理解,如果用户没有加入,如何显示“加入”按钮,如果用户已经加入,如何显示“取消加入”按钮。我已经附加了model和group.html页面。请让我知道如何在group.html文件中执行此操作 多谢各位 models.py from django.db import models class User(models.Model): first_name = models.TextField(blank=False, max_

我正在创建一个项目,您可以在其中创建和加入组。然而,我似乎无法理解,如果用户没有加入,如何显示“加入”按钮,如果用户已经加入,如何显示“取消加入”按钮。我已经附加了model和group.html页面。请让我知道如何在group.html文件中执行此操作

多谢各位

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>

关于组{{Group.id}

| {%csrf_令牌%} {%csrf_令牌%} 组名 组描述 小组成员 组创建者 {{group.name} {{group.description}} {{group.members.count} {%if group.creator.id==request.session.user\u id%} 你 {%else%} {{group.creator.first_name} {%endif%} 成员 成员名 会员姓氏 {group.members.all%中的成员为%s} {{成员.名字} {{成员.姓氏} {%endfor%}
您可以在应用程序文件夹的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 %}
{%如果用户|有_组:'groupName%}
{%else%}
不在一起

{%endif%}
希望这有帮助。
编辑:
我可以问一个可能对你有帮助的问题吗。为什么不使用django.auth提供的用户模型?

您可以在应用程序文件夹的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 %}
{%如果用户|有_组:'groupName%}
{%else%}
不在一起

{%endif%}
希望这有帮助。
编辑:
我可以问一个可能对你有帮助的问题吗。为什么不使用django.auth提供的用户模型?

您可以在应用程序文件夹的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 %}
{%如果用户|有_组:'groupName%}
{%else%}
不在一起

{%endif%}
希望这有帮助。
编辑:
我可以问一个可能对你有帮助的问题吗。为什么不使用django.auth提供的用户模型?

您可以在应用程序文件夹的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 %}
{%如果用户|有_组:'groupName%}
{%else%}
不在一起

{%endif%}
希望这有帮助。
编辑:

我可以问一个可能对你有帮助的问题吗。为什么不使用django.auth提供的用户模型?

变量成员是什么?元组?名单?字符串?我猜是查询集。变量成员是什么?元组?名单?字符串?我猜是查询集。变量成员是什么?元组?名单?字符串?我猜是查询集。变量成员是什么?元组?名单?一个字符串?我想这是一个查询集。如果我知道这个组的名称,这难道不管用吗?我需要它为所有可能存在的组工作。如果你有组的id,你可以做同样的事情。你只需要稍微改变一下过滤器。您可以将组的完整查询集作为参数传递,并循环应用筛选器的所有组。如果我不清楚,我可以根据您的代码编写一些可能有效的内容。是的,我不确定如何实现。有没有一种更简单的方法来检查会话用户的id是否在组中,以及他们是否在组中,然后只显示取消连接?我认为最干净的方法是过滤方法。如果我知道组的名称,这难道不管用吗?我需要它为所有可能存在的组工作。如果你有组的id,你可以做同样的事情。你只需要稍微改变一下过滤器。您可以将组的完整查询集作为参数传递,并循环应用筛选器的所有组。如果我不清楚,我可以根据您的代码编写一些可能有效的内容。是的,我不确定如何实现。有没有一种更简单的方法来检查会话用户的id是否在组中,以及他们是否在组中,然后只显示取消连接?我认为最干净的方法是过滤方法。如果我知道组的名称,这难道不管用吗?我需要它为所有可能存在的组工作。如果你有组的id,你可以做同样的事情。你只需要稍微改变一下过滤器。您可以将组的完整查询集作为参数传递,并循环应用筛选器的所有组。如果我不清楚,我可以根据您的代码编写一些可能有效的内容。是的,我不确定如何实现。有没有一种更简单的方法来检查会话用户的id是否在组中,以及他们是否在组中,然后只显示取消连接?我认为最干净的方法是过滤方法。如果我知道组的名称,这难道不管用吗?我需要它为所有可能存在的组工作。如果你有组的id,你可以做同样的事情。你只需要稍微改变一下过滤器。您可以将组的完整查询集作为参数传递,并循环应用筛选器的所有组。如果我不清楚,我可以根据您的代码编写一些可能有效的内容。是的,我不确定如何实现。有没有一种更简单的方法来检查会话用户的id是否在组中,以及他们是否在组中,然后只显示取消连接?我认为最干净的方法是过滤方法。