Django在模板中显示多对多 - 忽略了排序?

时间:2011-05-14 16:52:51

标签: django many-to-many sql-order-by

我正在尝试显示基于多对多关系的对象列表(图像)(带有中间Galleryimage模型的图像/图库)。

Galleryimage有一个名为position的附加字段,我想用它来管理图像在模板中列出的顺序。

我还有一个页面模型,可以选择附加一个图库。

我的模特看起来像这样:

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

图像全部按预期显示,但无论我做什么,顺序似乎总是相同。

有人能给我一个正确方向的推动吗?

任何建议表示赞赏。

感谢。

1 个答案:

答案 0 :(得分: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']