首页 > 解决方案 > django,谁从模型中获取过多数据并将其用作模板中的条件

问题描述

我有链接到用户模型的 profileinfo 模型。有两种用户类型学生和教师。如果用户已通过身份验证且用户类型为教师,我想显示“添加课程”链接。如果不是链接不应该出现在导航栏上

我在模板中尝试过以下代码

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
  </head>
  <body>
    <div class="container">
      <nav class="navbar navbar-default">
        <div class="container-fluid">
          <div class="navbar-header">
            <a class="navbar-brand" href="{% url 'index'%}">YFEA Academy</a>
          </div class= "nav navbar-nav-right">
          {% if user.is_authenticated and user.ProfileInfo.UserType == 'Teacher' %}
          <ul class="nav navbar-nav">
            <li><a href="#">Add Courses</a></li>
          </ul>
          {%endif%}
          {% if user.is_authenticated %}
          <ul class="nav navbar-nav navbar-right">
            <li><a href="{% url 'app:logout'%}">Logout</a></li>
          </ul>

          {% else%}
          <ul class="nav navbar-nav navbar-right">
            <li><a href="{% url 'app:register'%}">Register</a></li>
            <li><a href="{% url 'app:login'%}">login</a></li>
          </ul>
          {%endif%}
        </div>
      </nav>

    {%block body%}

    {% endblock %}
  </div>
  </body>
</html>

class UserProfile(models.Model):
    user = models.ForeignKey(User ,related_name = 'ProfileInfo')
    choices= (('S','Student'),('T','Teacher'))
    UserType = models.CharField(max_length = 50 , choices = choices)
    picture = models.FileField(upload_to = 'media', default = None)

标签: pythondjangoauthentication

解决方案


  1. 您不应该有混合的命名约定 - 将所有 attrs 转换为小写。关系名称也是如此。

  2. user = models.ForeignKey,我想,OneToOne实际上是一个字段

  3. user_type它只接受来自“选择”的值,实际上存储,而不是标题/描述/显示名称。分别是:'S''T'。因此,与“老师”的比较永远不会给True


推荐阅读