【问题标题】:Get gallery thumb from inline photo从内联照片中获取图库拇指
【发布时间】:2014-01-13 15:49:04
【问题描述】:

我有一个画廊模特和一个照片模特。在我的照片模型中,我有一个布尔字段,用于选择画廊缩略图应该是哪张照片。

class Gallery(models.Model):
    title = models.CharField(max_length=500, verbose_name="Tittel")

class Photo(models.Model):
    gallery = models.ForeignKey(Gallery, null=True, blank=True)
    image = ImageField(upload_to='uploads')
    frontpage_thumb = models.BooleanField(default=False)

这是我现在使用的代码,但这不是最好的方法:

{% for object in gallery_list %}
    <div class="post">

        {% for thumbnail in object.photo_set.all %}
            {% if thumbnail.frontpage_thumb %}<img src="{{MEDIA_URL}}{{ thumbnail.image }}">{% endif %}
        {% endfor %}

    </div>
{% endfor %}

谁有更好的方法?

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

    您可以使用自定义的ManagerQuerySet,如下所示:

    class PhotoQuerySet(models.query.QuerySet):
        def frontpage_thumb(self):
            return self.filter(frontpage_thumb=True)
    
    class PhotoManager(models.Manager):
        use_for_related_fields = True
    
        def get_queryset(self):
            return PhotoQuerySet(self.model)
    
    class Photo(models.Model):
        # ...
        objects = PhotoManager()
    

    然后您可以执行以下操作:

    # get first thumb for a gallery:
    >>> g = Gallery.objects.all()[0]
    >>> thumb = g.photo_set.all().frontpage_thumb()[0]
    
    # or all thumbs for all galleries:
    >>> all_thumbs = Photo.objects.all().frontpage_thumb()
    

    因为您的架构不能保证每个 Gallery 中只有一个 Photo 并设置了 frontpage_thumb=True,所以您仍然必须使用 .0 获取模板中结果的第一个元素,例如上面的第一个 Python 示例:

    {% for gallery in gallery_list %}
        <img src="{{ gallery.photo_set.all.frontpage_thumb.0.image.url }}">
    {% endfor %}
    

    【讨论】:

    • 完美运行!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 2012-09-25
    • 2016-11-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    相关资源
    最近更新 更多