我有以下模型:
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
中有以下内容
lettersAll = Letter.objects.filter(item=i_iID,deleted__isnull=True).order_by('-letterversion__created')[:3]
不幸的是,这会让我得到最后3个LetterVersion
的创建日期/时间,即使它们来自相同的Letter
。
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
我想要的地方:
letter 1 version 3 [1]
letter 3 version 4 [2]
letter 2 version 2 [3]
有没有什么办法可以让我得到编辑过的最后3个字母的列表?
发布于 2012-04-17 01:30:01
您可以使用Max()
of letterversion__created
对它们执行annotate()
操作,然后对其执行order_by()
。
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]
https://stackoverflow.com/questions/10178736
复制相似问题