2011-05-14 43 views
3

我想顯示一個基於多對多關係的對象列表(圖片/ Gallery中間圖庫模型)。Django在模板中顯示多對多 - 排序忽略?

Galleryimage有一個額外的字段叫做位置,我想用它來管理圖像在模板中列出的順序。

我也有一個頁面模型,可以選擇有一個畫廊附加到它。

我的模式是這樣的:

class Page(models.Model): 
    gallery = models.ForeignKey(Gallery, blank=True, null=True) 
    slug = models.SlugField() 
    title = models.CharField(max_length=200) 
    content = models.TextField() 

    def __unicode__(self): 
     return self.title 

class Image(models.Model): 
    title = models.CharField(max_length=50) 
    image = models.ImageField(upload_to='images') 

    def __unicode__(self): 
     return self.title 

class Gallery(models.Model): 
    title = models.CharField(max_length=50) 
    images = models.ManyToManyField(Image, through='Galleryimage') 

    def __unicode__(self): 
     return self.title 

class Galleryimage(models.Model): 
    image = models.ForeignKey(Image) 
    gallery = models.ForeignKey(Gallery) 
    position = models.IntegerField() 

    class Meta: 
     ordering = ['position'] 

我在我看來檢索頁面模式是這樣的:

def detail(request, page_id): 
    p = get_object_or_404(Page, pk=page_id) 
    return render_to_response('detail.html', {'page': p}, 
          context_instance=RequestContext(request)) 

最後,我在像這樣的模板顯示的圖像:

{% block images %} 
{% if page.gallery %} 
{% for image in page.gallery.images.all %} 
<a rel="gallery" href="{{ STATIC_URL }}{{ image.image }}"></a> 
{% endfor %} 
{% endif %} 
{% endblock %} 

圖像都顯示爲預期但是,順序似乎總是相同,我做了什麼。

任何人都可以給我一個正確的方向推動嗎?

任何意見讚賞。

謝謝。

+0

你能解釋一下'按預期展示'和'不管我做什麼'是什麼意思。你在做什麼,你期望改變圖像的順序? – 2011-05-19 16:34:35

回答

2

您是否嘗試在圖像模型中設置排序選項?我知道你在通過關係表中設置了位置,但是通過將它移動到Image模型(如果可能?)並設置該模型的順序,它就可以工作。

class Image(models.Model): 
    title = models.CharField(max_length=50) 
    image = models.ImageField(upload_to='images') 
    position = models.IntegerField() 

    def __unicode__(self): 
     return self.title 

    class Meta: 
     ordering = ['position']