简体   繁体   中英

Aggregation in django with datetime constraint

I know if I have the following tables ...

class Letter(models.Model):
    item = models.ForeignKey(Item)
    name = models.CharField(max_length=40)
    created = models.DateTimeField(default=datetime.now)

    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)
    text = models.TextField()

... I can get the last 3 letters with the latest letter versions by doing:

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

My question is the above query is for all letter versions for a set letter. What happens if I only want to query all letter versions for a letter up to a set date (like letterversion__lt )?

If I understand what you are asking, this should make the query work:

some_date = datetime.date(2012,8,12)
lettersBeforeSomeDate = Letter.objects.filter(
                 item=i_iID,
                 deleted__isnull=True,
                 letterversion__created__lt = some_date
             ).annotate(
                 last_created_version=Max('letterversion__created')
             ).order_by('-last_created_version')[:3]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM