首页 > 解决方案 > 在 django 模板中比较模型中的选择字段

问题描述

模型.py

class Skill(models.Model):

    title_choice = [
        ('LANGUAGE', 'Language'),
        ('FRAMEWORK', 'Framework')
    ]
    title = models.CharField(max_length=15, choices=title_choice,
                             default='LANGUAGE')
    name = models.CharField(max_length=50)

模板(与标题比较时)是

<h2 class="mb-5">Skills</h2>
            {% for item in Skill %}
                {% if item.title == "LANGUAGE" %}
                    <h3 class="mb-0">Programming Languages</h3>
                    <ul class="subheading mb-3">
                        <li class="list-inline-item">{{ item.name }}</li>
                    </ul>
                {% elif item.title == "FRAMEWORK" %}
                    <div class="subheading mb-3">Frameworks</div>
                    <ul class="list-inline dev-icons">
                        <li class="list-inline-item">{{ item.name }}</li>
                    </ul>

                {% endif %}
            {% endfor %}

输出: 当我与标题比较时输出

当我尝试比较模型中的标题时,它没有显示任何数据但是当我将“名称”与数据库值进行比较时,它显示了正确的输出。模板(当我与名称比较时)

<h2 class="mb-5">Skills</h2>
            {% for item in Skill %}
                {% if item.name == "Python" %}
                    <h3 class="mb-0">Programming Languages</h3>
                    <ul class="subheading mb-3">
                        <li class="list-inline-item">{{ item.name }}</li>
                    </ul>
                {% elif item.name == "React" %}
                    <h3 class="mb-0">Frameworks</h3>
                    <ul class="subheading mb-3">
                        <li class="list-inline-item">{{ item.name }}</li>
                    </ul>

                {% endif %}
            {% endfor %}

输出:当我与名称比较时

我想将值与标题进行比较并显示结果

标签: pythondjango

解决方案


在您的模板中,您希望能够将 Charfield 与类/实例中的 CONSTANT 进行比较。为此,您必须修改您的代码,如下所示:

class Skill(models.Model):
    LANGUAGE = 'L'
    FRAMEWORK = 'F'

    title_choice = [
        (LANGUAGE, 'Language'),
        (FRAMEWORK, 'Framework')
    ]
    title = models.CharField(max_length=15, choices=title_choice,
                         default='LANGUAGE')
    name = models.CharField(max_length=50)

您针对 CONSTANT 定义的值将存储在数据库中,即语言的“L”。

get_title_display()元组中的第二个值是 django 在调用函数时将返回的值。

在您的模板中,您现在可以执行以下操作:

{% if item.title == item.LANGUAGE %}

与选择进行比较。

https://docs.djangoproject.com/en/3.1/ref/models/fields/#choices


推荐阅读