python - 在 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 %}
输出:当我与名称比较时
我想将值与标题进行比较并显示结果
解决方案
在您的模板中,您希望能够将 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
推荐阅读
- c# - Microsoft.office.interop.excel 在更新 PageSetup 时非常慢
- javascript - 如何根据其他一些集合字段过滤 mongodb 中的结果?
- google-maps - 我如何不通过谷歌地图显示替代路线
- php - 在 SS4 中扩展 SilverStripe 方法
- unity3d - 在 Unity 中找不到播放服务解析器
- html - 使第二个子元素符合父高度且不重叠
- python - 如何通过用户输入的数字多次打印一个字符?
- c - CS50 信用卡验证
- google-cloud-platform - 使用 DataFlow 中的“从 SQL 创建作业”选项卡将数据从 BigQuery 导出到 Google Cloud SQL
- docker - 去微应用程序总是得到“/greeter-srv”没有这样的文件或目录 kubernetes