Django QuerySet上一次添加自类别

时间:2018-12-09 16:08:28

标签: python django django-models django-views

可能是一个非常简单的解决方案,但实际上无法提出一个解决方案。 最终目标是创建一个首先显示类别的画廊。每个类别应显示最后添加的图像以及相应的类别名称。

我的模型。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'

我的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)

我的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 :(得分:0)

您可以在视图中添加

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

,然后在模板的相关部分:

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

那只是一个例子,有很多更优雅的方法可以实现。