可能是一个非常简单的解决方案,但实际上无法提出一个解决方案。 最终目标是创建一个首先显示类别的画廊。每个类别应显示最后添加的图像以及相应的类别名称。
我的模型。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”作为变量,但是您如何做到这一点? 任何投入都是非常有价值的,至少可以表明我的工作方向。
答案 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 }}">
那只是一个例子,有很多更优雅的方法可以实现。