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