Django QuerySet 最后从类别中添加

可能是一个非常简单的解决方案,但不能真正想出一个。最终目标是创建一个首先显示类别的画廊。每个类别都应显示最后添加的带有各自类别名称的图像。


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

我的意见.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' 作为变量,但你如何做到这一点?任何输入都是非常有价值的,至少表明我应该工作的方向。


慕森卡
浏览 127回答 1
1回答

Cats萌萌

您可以在视图中添加:for&nbsp;c&nbsp;in&nbsp;cat: &nbsp;&nbsp;&nbsp;&nbsp;cat.latest_image&nbsp;=&nbsp;Item.objects.filter(category=c).latest('date')然后在模板的相关部分:<img&nbsp;class="images"&nbsp;src="{{&nbsp;cat.latest_image.image.url&nbsp;}}">这只是一个例子,有很多更优雅的方法可以实现这一点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python