2013-01-17 98 views
1

經過了關於reversed many-to-many look ups張貼(反向),我想知道我的項目/圖片問題的最佳做法是:的Django:訪問多到許多模板

我想註冊一個號的項目和用戶可以上傳(但不是必需的)多個項目圖片。通過

projects = Project.objects.filter(user = logged_user) 

返回與項目的清單

from easy_thumbnails.fields import ThumbnailerImageField 

class Project(models.Model): 
    name = models.CharField(_('Title'), max_length=100,) 
    user = models.ForeignKey(User, verbose_name=_('user'),) 
    ... 

class ProjectPicture(models.Model): 
    project = models.ForeignKey('Project') 
    picture = ThumbnailerImageField(_('Image'), 
      upload_to='user/project_pictures/', null=True, blank=True,) 

    def __unicode__(self): 
     return u'%s\'s pictures' % (self.project.name) 

所以對於每一個用戶,我在「儀表板」展示自己的項目:

所以我定義了以下兩類名稱等

現在我想在儀表板表中顯示該項目的圖片。因此,我有兩個問題,我正在尋求建議:

1)班級設置實際上是最好的辦法嗎?我將上面所示的類分開,以允許用戶爲每個項目上傳多個圖片。會不會有更好的方法呢?

2)如果圖片可用,如何在模板中顯示項目的第一張圖片?我是否需要對與項目相對應的每個ProjectPicture對象進行查詢?或者有沒有一個優雅的Django解決方案?

回答

2

這不是多對多的關係,你使用外鍵。這是正常的設置。要訪問模板中的第一張圖片,您可以使用{{ project.projectpicture_set.all.0 }},它會生成額外的查詢。爲了避免它使用prefetch_related

+0

絕對正確,這不是一個多對多的關係。謝謝你的建議! – neurix

+0

但是,是否也爲M2M預取相關的工作? – sprezzatura