Django отображает многие ко многим в шаблонах - порядок игнорируется? - PullRequest
3 голосов
/ 14 мая 2011

Я пытаюсь отобразить список объектов (изображений) на основе отношения «многие ко многим» (изображение / галерея с промежуточной моделью Galleryimage).

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

Все изображения отображаются, как и ожидалось, однако, порядок всегда кажется одинаковым, независимо от того, что я делаю.

Может кто-нибудь подсказатьв правильном направлении?

Любой совет приветствуется.

Спасибо.

1 Ответ

2 голосов
/ 20 мая 2011

Вы пытались установить опцию заказа в модели изображения? Я знаю, что вы установили позицию в таблице сквозных отношений, но, переместив ее в модель изображения (если возможно?) И установив порядок в этой модели, она будет работать.

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']
...