如何在django中为每个相关对象选择一个对象? [英] How can I select one object per each related object in django?

查看:118
本文介绍了如何在django中为每个相关对象选择一个对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有两个类:

class Group(models.Model):
    name = models.CharField(...)

class Item(models.Model):
    group = models.ForeignKey(Group)
    published = models.DateTimeField(auto_now_add=True)

如何使QuerySet从每个组中选择最新发布的项?我想这应该是像

How can I make a QuerySet to select the latest published Item from each Group? I guess it should be something like

Item.objects.order_by('published').distinct('group')

但我无法使其正常工作。

but I can't make it work.

推荐答案

models.py

class Group(models.Model):
    name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name

    def latest_published(self):
        items = Item.objects.filter(group=self)[:1]
        for item in items:
            return item.published
        return ''

class Item(models.Model):
    group = models.ForeignKey(Group)
    published = models.DateTimeField()

    def __unicode__(self):
        return "{0}".format(self.published)

    class Meta:
        ordering = ('-published',)

views.py

def myview(request):
    groups = Group.objects.filter()

    [.........]

模板

{% for group in groups %}
    {{group}} - {{group.latest_published}}<br/>
{% endfor %}

这篇关于如何在django中为每个相关对象选择一个对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆