如果Django模板中的语句问题

时间:2017-12-04 16:46:39

标签: python django templates if-statement

我正在尝试比较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 %}

有趣的是当我打印{{run.pms_id}}时,它没有显示ID,它显示pms_name(可能是因为返回self.pms_name)

所以在比较期间,我试图与名称进行比较,即" PMSName1"而不是身份但仍然没有运气。 有什么建议比较吗?

由于

2 个答案:

答案 0 :(得分:0)

Pms_id是一个对象,所以如果您想获取id或名称,请执行以下操作:

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

答案 1 :(得分:0)

Django中的ForeignKey字段不会简单地为您提供ID;它为您提供了实际的相关对象。您不应该使用_id格式,因为Django实际上通过将_id添加到字段名称来创建基础数据库列。因此,您有一个名为pms_id_id的数据库列。

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

{% if run.pms_id_id == whatever %}

或访问相关对象的ID:

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

第一种形式的优点是它不会触发相关对象的数据库查找;第二个优点是您可以使用例如run.pms_id.pms_name来比较任何字段。