0

私は次のモデルを持っています:

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作成されます。Letterを使用して最近編集された最後の 3 秒を選択しようとしていますLetterVersion.create。私の中には次のものがありますviews.py

lettersAll = Letter.objects.filter(item=i_iID,deleted__isnull=True).order_by('-letterversion__created')[:3]

残念ながら、これLetterVersionにより、作成された日付/時刻が同じであっても、最後の 3 秒が取得されます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 文字のリストを取得できる方法はありますか?

4

1 に答える 1

1

of 、それからannotate()それでそれらを行うことができます。Max()letterversion__createdorder_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]
于 2012-04-16T17:30:01.157 に答える