如何从django模板中的相关模型中获取单个对象

时间:2017-09-15 11:53:24

标签: python django

我有两个模特(项目和专辑)。 相册有一个指向Item的外键 像这样

class Item(models.Model):
    name = models.CharField(max_length=50)
    price = models.IntegerField()

class Album(models.Model):
     photo = ImageField(upload_to=item_directory_path)
     caption = models.CharField(max_length=100, blank=True)
     item = models.ForeignKey(Item, on_delete=models.CASCADE)
     default = models.BooleanField(default=True)

在我的模板中

             {% for item in item_tags %}        
                    <div class="item-dock">
                        <a href="{{item.name}}">
                            <img src="{{item.album_set.photo.filter(default=True)}}" class="img-responsive">
                            <p class="item-name text-center">{{item.name|capfirst}}</p>
                        </a>

现在真正的问题是。鉴于查询相关模型将始终返回查询集。如何从模板中的项目的相册模型中检索单个对象(在本例中为此查询集中的单个照片,其中“default = True”)。

我了解queryset和相关经理!

任何帮助,建议将不胜感激

2 个答案:

答案 0 :(得分:1)

只要查询第一个元素即可。

# something like this in your template
{% item.album_set.first.photo %}

答案 1 :(得分:0)

您可以使用自定义模板过滤器: 有关创建和使用自定义模板标记和过滤器的详细信息,请访问: https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

from django import template

register = template.Library()


def default_image(queryset):
    return queryset.get(default=True).photo.url

register.filter('default_image', default_image)

您可以在模板中使用它,如下所示:

{{ item.album_set|default_image }}

请记住,在使用过滤器之前,您需要{%加载your_custom_template_tags%}