Django模板issu中的if语句

2024-05-15 16:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图比较django模板中的值。如果语句不起作用 这是我的密码 型号等级:

class Run(models.Model):
    run_id = models.AutoField(primary_key=True)
    run_name = models.CharField(unique=True, max_length=30)
    pms_id = models.ForeignKey('ProcessManagementSystem', db_column = 'pms_id')

def __unicode__(self):
    return self.run_name 


class ProcessManagementSystem(models.Model):
    pms_id = models.AutoField(primary_key=True)
    pms_name = models.CharField(unique=True, max_length=30)

def __unicode__(self):
       return self.pms_name

我的模板

{% for run in all_runs %}
        {{run.pms_id}}
        {% if run.pms_id == "PMSName1" %}
                    {{run.pms_id}}
        {% endif %}
{% endfor %}

有趣的是当我打印的时候{{运行.pms\u id}},它没有显示ID,而是显示pms\U名称(可能是因为返回)self.pms\u名称)你知道吗

因此,在比较过程中,我试图用名称(即“PMSName1”)而不是id进行比较,但仍然没有运气。 有什么比较的建议吗?你知道吗

谢谢


Tags: keyrunnameself名称模板idtrue
2条回答

Django中的ForeignKey字段并不是简单地给出ID,而是给出实际的相关对象。您不应该使用_id格式,因为Django实际上是通过在字段名中添加_id来创建基础数据库列的。因此,您有一个名为pms_id_id的db列。你知道吗

在模板中,对象不等于id或名称。您可以直接访问ID字段:

{% if run.pms_id_id == whatever %}

或访问相关对象的id:

{% if run.pms_id.pms_id == whatever %}

第一种形式的优点是它不会触发对相关对象的db查找;第二种形式的优点是可以与任何字段进行比较,例如使用run.pms_id.pms_name。你知道吗

Pms_id是一个对象,因此如果要获取id或名称,请执行以下操作:

{% if run.pms_id.pms_id == 1 %} or {% if run.pms_id.pms_name == "PMSName1" %}

相关问题 更多 >