2011-05-14 41 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']