IF语句中的条件要求明确指定值

时间:2019-05-01 12:14:48

标签: django django-templates django-views

我创建了一个模板,该模板显示循环中的项目。循环中有一个条件,但是除非明确指定,否则该条件不起作用。

{% extends 'blog/base.html' %}
{% block content %}

    <h3>{{ user.username }}</h3>

    {% for project in projects %}
        {% if user.username == 'testuser' %}
            <h5>{{ project.title }}</h5>
            <p>{{ project.description }}</p>
            <p>{{ project.objectives }}</p>
            <pre>{{ project.score }}</pre>
            <pre>{{ project.student_id }}</pre>
        {% endif %}
    {% endfor %}

{% endblock content %}

上面的代码可以正常工作,并返回分配给名为testuser的用户的记录。

但是,如果我编写如下代码,它将跳过所有记录

{% extends 'blog/base.html' %}
{% block content %}

    <h3>{{ user.username }}</h3>

    {% for project in projects %}
        {% if user.username == project.student_id %}
            <h5>{{ project.title }}</h5>
            <p>{{ project.description }}</p>
            <p>{{ project.objectives }}</p>
            <pre>{{ project.score }}</pre>
            <pre>{{ project.student_id }}</pre>
        {% endif %}
    {% endfor %}

{% endblock content %}

我已经添加了模型中的代码

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Projects(models.Model):
    title = models.CharField(max_length=150)
    description = models.TextField()
    objectives = models.TextField()
    score = models.IntegerField()
    #file = models.FileField()
    date_posted = models.DateTimeField(default=timezone.now)
    student_id = models.ForeignKey(User,on_delete=models.CASCADE)

    def __str__(self):
        return self.title

1 个答案:

答案 0 :(得分:1)

student_idUser对象,而不是 string ,因此在这里,您将字符串(username)与{{1} }对象,以及名称为User的{​​{1}}与字符串User相同。

最优雅的解决方案可能是将用户与用户进行比较,所以:

'testuser'

因此,我们省略了'testuser',并将{% if user == project.student_id %}对象与.username对象进行比较。

  

注意:枚举(特别是在模板中,但也在Django层本身中)效率不高,您应进行以下查询:   为您进行过滤。

     

您可以使用以下方法过滤查询集:

User
     您认为的

仅获得登录用户所在的项目   学生。

  

注意User通常不带有user_projects = Project.objects.filter(student_id=request.user)后缀。 Django将自动添加一个名为ForeignKey的额外字段,   存储外键引用的主键。毕竟,   Django中的_id将延迟加载相关对象。