Django: как создать словарь объектов и отобразить в шаблонах

Здравствуйте, я просмотрел похожие вопросы, но ни один из них не относится к тому, что я пытаюсь сделать, они либо объясняют, как упорядочить вещи в панели администратора, либо просто итерация над словарями объектов.

Я создал базовую модель фотографий, которая содержит значение gallery_order, чтобы я мог редактировать их в Admin.

Я хочу заполнить мой шаблон картинками в соответствии со значениями gallery_order в порядке от 1 вверх.

Я полагаю, что лучший способ обработки этого - словарь, но я не знаю, где его инициализировать, если я помещу его в модель изображения, то каждое изображение будет содержать dict со всеми изображениями, порядковым номером и url в нем, что кажется умным.

Моя текущая модель:

class Picture(models.Model):
    title = models.CharField(max_length=36, blank=False, unique=True)
    gallery_order = models.IntegerField(default=0)
    image = models.ImageField(upload_to='photos/', blank=False)

    def __str__(self):
        return self.title

Мой код шаблона:

<head>
    <meta charset="utf-8">
    {% block content %}
    <div class="row">
        {% if pictures %}
            {% for picture in pictures %}
                <div class="col-md-12">
                    <div class="card mb-0">
                        <img class="card-img-top" src="{{ picture.image.url }}">
                    </div>
                </div>
            {% endfor %}
        {% endif %}
    </div>
    {% endblock content %}
</head>

мой код администратора:

@admin.register(Picture)
class PictureAdmin(admin.ModelAdmin):
    list_display = ('gallery_order', 'title', 'image')
    list_display_links = ['gallery_order']
    search_fields = ['title']

    def get_queryset(self, request):
        queryset = super(PictureAdmin, self).get_queryset(request)
        queryset = queryset.order_by('gallery_order')
        return queryset

Я пытался выяснить, как django отображает их, просматривая PK в psotgres db, но похоже, что он просто отображает их в соответствии с последним редактированием.

Спасибо :)

Я так глуп, что иногда забываю о своих взглядах!

Все, что мне нужно было сделать, это указать order_by...

class Home(View):

    pictures = Picture.objects.all().order_by('gallery_order')

    def get(self, request):
        return render(request, 'home.html', {'pictures': self.pictures})

Вы также можете сделать это на уровне модели, добавив следующее в конец вашей модели.

class Meta:
        ordering = ['gallery_order']
Вернуться на верх