2014-01-13 19 views
0

我有一個圖庫模型和照片模型。在我的照片模型中,我有一個布爾字段用於選擇圖庫縮略圖中的哪張照片。從內嵌照片獲取圖庫的拇指

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) 

這是現在使用的代碼IM,但不能是最好的方式:

{% 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 %} 

任何人有這樣做的更好的辦法?

回答

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() 

因爲你的模式並不能保證你只有一個PhotoGalleryfrontpage_thumb=True設置,您仍然必須使用.0獲取模板中結果的第一個元素,如上面第一個Python示例中所示:

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

完美的作品!謝謝! –