在Django中,如何检查用户是否在site_id中(site_id由after创建)

nzkunb0c  于 2023-03-09  发布在  Go
关注(0)|答案(2)|浏览(101)

系统的目的是检查用户是否在这样的site_id中或者不向他显示HTML页面的一部分

我在这里是和群体一起做的

views.py

def is_admin(user):
    return user.groups.filter(id=1).exists()

def is_client(user):
    return user.groups.filter(id=4).exists()

模板(主列表)

{% for group in request.user.groups.all %}
    {% if 1 == group.id %}

我想使用site_id(外键)执行此操作

这是我的第一次尝试:

views.py

def is_siteone(user):
    return user.site_id.filter(id=1).exists()

模板(主列表)

{% if is_siteone %}

models.py

class Site(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=255)
    version = models.CharField(verbose_name='Program version', blank=False, default='1.0', max_length=20)

    def __str__(self):
        return self.name

    def filter(self, id):
        pass

但它返回以下错误error return
你对下一步有什么想法吗?
My site_id是Django的auth_user表中Site表的外键

sc4hvdpw

sc4hvdpw1#

看起来您试图直接从user对象访问site_id属性,但site_id不是User模型的直接属性,而是将User模型与Site模型关联的外键,因此尝试执行以下操作:

def is_siteone(user):
    return user.site_id == 1 if user.site_id else False

然后在模板中,使用如下函数:

{% if is_siteone(request.user) %}
    <!-- some content -->
{% endif %}
xdnvmnnf

xdnvmnnf2#

以下是我能够做到的:
views.py

def is_siteone(user):
    return user.site_id == 1 if user.site_id else False

模板(主列表)

<h1>{{ user.site_id }}</h1>
    <p>---</p>
    <h1>{{ is_siteone }}</h1>

{#    {% for user in request.user.site.id %}#}
    {% if is_siteone %}

我的应答器{{user.site_id }}返回文本形式的 siteone,我的应答器{{ is_siteone }}返回False
所以我修改了www.example.com中的代码views.py如下:

def is_siteone(user):
    return user.site_id == "siteone" if user.site_id else False

我指定我的上下文是这样的,所以我不在模板中添加(request.user

"is_siteone": is_siteone(request.user),

相关问题