首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django:选择模型并按子模型排序创建细节

Django:选择模型并按子模型排序创建细节
EN

Stack Overflow用户
提问于 2012-04-17 01:25:32
回答 1查看 186关注 0票数 0

我有以下模型:

代码语言:javascript
运行
复制
class Item(models.Model):
    closed = models.DateTimeField(blank=True, null=True)
    closed_by = models.ForeignKey(User, blank=True, null=True)

class Letter(models.Model):
    item = models.ForeignKey(Item)
    created = models.DateTimeField(default=datetime.now)
    letter_name = models.CharField(max_length=40)
    file_name = models.CharField(max_length=40, blank=True, null=True)
    deleted = models.DateTimeField(blank=True, null=True)
    deleted_by = models.ForeignKey(User, blank=True, null=True)

    def lastVersion(self):
    return self.letterversion_set.order_by('created').latest().created

class LetterVersion(models.Model):
    letter = models.ForeignKey(Letter)
    created = models.DateTimeField(default=datetime.now)
    created_by = models.ForeignKey(User)
    text = models.TextField()

    def letterItem(self):
    return self.letter.item

编辑Letter时,会创建一个新的Letter Version。我正在尝试选择最近使用LetterVersion.create编辑过的最后3个Letter。我的views.py中有以下内容

代码语言:javascript
运行
复制
lettersAll = Letter.objects.filter(item=i_iID,deleted__isnull=True).order_by('-letterversion__created')[:3]

不幸的是,这会让我得到最后3个LetterVersion的创建日期/时间,即使它们来自相同的Letter

代码语言:javascript
运行
复制
letter 1 version 3 [1]
letter 3 version 4 [2]
letter 1 version 2 [3]
letter 1 version 1
letter 2 version 2
letter 2 version 1
letter 3 version 3
letter 3 version 2
letter 3 version 1

我想要的地方:

代码语言:javascript
运行
复制
letter 1 version 3 [1]
letter 3 version 4 [2]
letter 2 version 2 [3]

有没有什么办法可以让我得到编辑过的最后3个字母的列表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-17 01:30:01

您可以使用Max() of letterversion__created对它们执行annotate()操作,然后对其执行order_by()

代码语言:javascript
运行
复制
from django.db.models import Max

lettersAll = Letter.objects.filter(
        item=i_iID,
        deleted__isnull=True
    ).annotate(
        last_created_version=Max('letterversion_created')
    ).order_by('-last_created_version')[:3]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10178736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档