python - 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)
解决方案
您不应该有混合的命名约定 - 将所有 attrs 转换为小写。关系名称也是如此。
user = models.ForeignKey
,我想,OneToOne
实际上是一个字段user_type
它只接受来自“选择”的值,实际上存储值,而不是标题/描述/显示名称。分别是:'S'
和'T'
。因此,与“老师”的比较永远不会给True
。
推荐阅读
- sql - 检查ES和SQL数据库的区别
- csv - 如何在 PySpark 中读取带有逗号分隔的列的 csv?
- javascript - 如何在 Phoenix elixir webapp 中设置 materializecss javascript
- c# - 我将如何像在记事本/记事本++中一样创建“查找表单”?C#
- spring - 多个版本的spring boot
- mysql - 你如何撤销 MySQL 中用户的所有 EXECUTE 权限?
- python - 卷积层和池化后的维度
- c# - UnityMainThreadDispatcher 是做什么的?
- python - 如何提取键及其值并添加值以在 python 字典中打印总数?
- c# - 如何在 EFCore 中使用 EF .SqlQuery 表达式?