django过滤器用于模板

时间:2016-01-14 05:05:07

标签: python django sqlite

我尝试以这种方式过滤tepmplate中的数据:

{% if devtypes %}
<ul>
  {% for devtype in devtypes %}
    <li> <h3> {{devtype.name}} </h3> ( {{devtype.desc}} )
      <ul>
      {% for device in devices %}
        {% if device.devtype == devtype %}
        <li><h4>{{device}}</h4></li>
        {% endif %}
      {% endfor %}
      </ul>
  </li>
  {% endfor %}
</ul>
{% endif %}

这是我的模特:

class Devtype(models.Model):
    pk_devtype=models.AutoField(primary_key=True)
    name=models.CharField(max_length=30, blank=True, null=True)
    desc=models.CharField(max_length=30, blank=True, null=True)

    def __str__(self):
        return self.name

class Device(models.Model):
   pk_device=models.AutoField(primary_key=True)
   devtype=models.ForeignKey('Devtype', on_delete=models.CASCADE)
   name=models.CharField(max_length=30, blank=True, null=True)
   login=models.CharField(max_length=30, blank=True, null=True)
   password=models.CharField(max_length=30, blank=True, null=True)
   ip=models.CharField(max_length=20, blank=True, null=True)
   desc=models.CharField(max_length=30, blank=True, null=True)

   def __str__(self):
      return self.name

我认为我的方式是错的,我应该替换这部分

{% if device.devtype == devtype %}

像过滤器一样。请帮忙。

1 个答案:

答案 0 :(得分:4)

创建外键时,django会自动创建反向关系;在following relationships backward下的文档中描述。

您需要在模板中使用它,如下所示:

{% if devtypes %}
<ul>
  {% for devtype in devtypes %}
    <li> <h3> {{devtype.name}} </h3> ( {{devtype.desc}} )
      <ul>
      {% for device in devtype.device_set.all %}
        <li><h4>{{device}}</h4></li>
      {% endfor %}
      </ul>
  </li>
  {% endfor %}
</ul>
{% endif %}