如何在Django中的模板中过滤BooleanField?

时间:2017-09-26 16:47:12

标签: python django

我正在使用Django为我的网站准备一个图片库。我的Gallery Model Foreign Key基本上有一个Image Model。我的BooleanField模型中有Image来制作封面照片。

我需要的是获得图像之间的真值。

{% for gallery in gallery_list %}
 <div class="grid-item {{ choices | random }}">
  <a href="#" data-background="{{gallery.images}}#howtofilter?#" data-rel="lightcase:gal" title="Image Caption"></a>
   </div>
{% endfor %}

我检查了文档中的自定义过滤器试图解决但我无法弄清楚。你能救我吗?

由于

Ps编辑:添加我的模型

    class Gallery(models.Model):
        title = models.CharField(max_length=200,verbose_name=_("gallery_title"),help_text _("Enter the Gallery title"))

    class Image(models.Model):
        title = models.CharField(max_length=200,verbose_name=_("image_title"),help_text _("Enter the Image title"))
        gallery = models.ManyToManyField(Gallery)
        is_cover_photo = models.BooleanField()

2 个答案:

答案 0 :(得分:1)

您可以在Gallery模型中编写一个方法来返回封面图片:

class Gallery(models.Model):
    # other fields
    def cover_image(self):
        return self.image_set.filter(is_cover_photo=True).first()

然后在模板中:

{% for gallery in gallery_list %}
    {% with cover=gallery.cover_image %}
        {% if cover %}
            {# do something with cover image #}
        {% endif %}
    {% endwith %}
{% endfor %}

答案 1 :(得分:1)

最好在模板之外保留这样的复杂逻辑,以避免它们过于复杂。将其保存为视图和/或模型!

这里最好的选择是在Gallery模型上设置一个方法来获取具有封面图片的Image。类似的东西:

class Gallery
    ...model fields...

    def get_cover_image(self):
         return self.images_set.filter(cover_photo=True).first()

然后在您的模板中,假设Image模型具有url之类的属性:

{% for gallery in gallery_list %}
  <div class="grid-item {{ choices | random }}">
    <a href="#" data-background="{{gallery.get_cover_image.url}}" data-rel="lightcase:gal" title="Image Caption"></a>
  </div>
{% endfor %}

要在此处保存大量数据库查询,您可能需要/想要使用prefetch_related来获取显示图库所需的所有Image个对象,但这是一个不同的问题。