Django QuerySet последний добавленный из категории - PullRequest
0 голосов
/ 09 декабря 2018

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

My models.py

class Category(models.Model):
    name           = models.CharField(max_length=200)
    slug           = models.SlugField()
    objects        = models.Manager()

    class Meta:
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name

class Item(models.Model):
    name           = models.CharField(max_length=200)
    description    = models.TextField(blank=False, null=True)
    date           = models.DateTimeField(blank=False, null=True)
    image          = models.ImageField(blank=True, null=True)
    category       = models.ForeignKey(Category, blank=True, null=True, on_delete=models.SET_NULL)
    objects        = models.Manager()


    class Meta:
        app_label = 'home'
        get_latest_by = 'date'

My views.py

def index(request):
    cat = Category.objects.all()
    latest = Item.objects.latest('date')

    context = {
        'categories': cat,
        'last_added': latest,
    }
    return render(request, 'gallery/index.html', context)

My index.html

{% block content %}
<h4 class="gallery">Gallery</h4>
    {% for category in categories %}
        <p class="category">{{ category.name }}</p>
        <p> <img class="images" src="{{ last_added.image.url }}"> </p>    
    {% endfor %}

{% endblock %}

Я не могу понять, как отобразить последнее изображение для соответствующей категории.Я знаю, что должен каким-то образом создать динамический запрос, который будет использовать «category.name» в качестве переменной, но как вы это сделаете?Любой вклад будет очень ценным, по крайней мере, указав направление, в котором я должен работать.

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете добавить в своем представлении:

for c in cat:
    cat.latest_image = Item.objects.filter(category=c).latest('date')

, а затем в соответствующую часть вашего шаблона:

<img class="images" src="{{ cat.latest_image.image.url }}">

Это всего лишь пример, есть тонны более элегантныхспособы достижения этого.

...