我正在尝试比较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"而不是身份但仍然没有运气。 有什么建议比较吗?
由于
答案 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
来比较任何字段。