尝试进行身份验证并根据用户类型授予用户某些权限。但什么也没有发生

Traying to authentication and give user certain permission, depending on the type of user. But noting is happening

根据用户的类型,进行身份验证并授予用户一定的权限。但是注意正在发生。 我尝试根据用户类型限制对站点上某些功能的访问。但是当我设置条件时,页面上没有任何反应: 这是我的 model.py

 from django.contrib.auth.models import AbstractUser
 from django.db import models
 from django.urls import reverse

 user_type_choice = (('1', 'majstor'),
                    ('2', 'korisnik'))

 class CustomKorisnici(AbstractUser):
     user_type = models.CharField(max_length=100,blank=True,choices=user_type_choice)
     username = models.CharField(max_length=100,unique=True)
     last_name = models.CharField(max_length=100)
     first_name = models.CharField(max_length=100)
     phone_number = models.CharField(max_length=100)
     is_superuser = models.BooleanField(default=False)
     is_active = models.BooleanField(default=True)
     is_staff = models.BooleanField(default=False)
     email = models.EmailField(max_length=100,unique=True)

在设置里,我设置:AUTH_USER_MODEL.

 AUTH_USER_MODEL ='korisnici.CustomKorisnici' 

这是我的 login.html 页面。这部分工作正常。

 {% extends "nav_footer.html" %} 
 {% load static %}
 {% block content %}
 <div class="form-group">
   <div class="container">
     <div class="form">
       <form method="post">     
       {% csrf_token %}
       {{ form.as_p }}
       <button id="btn" class="btn" type="submit">Login</button>
       </form>
     </div>
   </div>
  </div>
 </div>
 {% endblock %}

**在我的 home.html 页面中,我为用户设置了条件,这是一个问题。 **

   {% if user.is_authenticated and user.user_type == "korisnik" %}
      <div class="col-md-4">
         <a class="nav-link" href="{% url 'post_page' %}">All posts</a>
       </div>
   {% endif %}

首先我设置了一个条件 if user.is_authenticated 并且这工作正常。在那之后只是为了检查,我添加了一个条件 if user.is_authenticated and user.username == 'admin'。当我以管理员身份登录或用户名 == 'John' 的某些其他条件时,它工作正常并且 link 可见。 但是当我尝试条件 user.user_type == "korisnik" 时,即使我登录时 link 也不可见 User 如何将 user_type 设置为 korisnik。我不知道我在这里做错了什么。我需要做自定义登录功能还是其他什么

数据库中存储的值是元组的第一个值。根据元组 ('1', 'majstor') 的含义,第一个值 '1' 将存储在类型为 'majstor' 的用户的字段中。所以在你的模板中你应该写:

{% if user.is_authenticated and user.user_type == "2" %}

另外,为了简化检查,最好的办法是在模型中使用常量。所以你会像这样改变你的模型:

class CustomKorisnici(AbstractUser):
    MAJSTOR = '1'
    KORISNIK = '2'
    USER_TYPE_CHOICE = (
        (MAJSTOR, 'majstor'),
        (KORISNIK, 'korisnik')
     )
    user_type = models.CharField(max_length=100, blank=True, choices=USER_TYPE_CHOICE)
    # rest of the fields etc.

现在在模板中检查将简单地变成:

{% if user.is_authenticated and user.user_type == user.KORISNIK %}