Django query: "datetime + delta" as an expression

Well, my question is a bit like this:

Suppose I have the following model, this is a simple case:

class Period(models.Model):
    name = CharField(... field specs here ...)
    start_date = DateTimeField(... field specs here ...)
    duration = ... don't know what field should i use but this has to hold a delta ...

I would like to get objects where (start_date + duration) <now in a django request (I know that I can, in python, test as my_date_time + a_time_delta <datetime.now (), but it’s not ... I need this as part request).

How can I get it?

+1
source share
3 answers

I think your quick answer is to subtract from your now datetime and add from your datetime model as follows:

.filter(start_date__lte=datetime.now()-timedelta(days=duration))
+2
source

, F() expression duration - timedelta. ORM Django .

extra(). , . PostgreSQL:

Period.objects.extra(
    where=["start_date + duration * INTERVAL '1 day' < %s"],
    params=[datetime.now()]
)

, . , .

+2

extra ORM Django, :

1) ( )

class Period(models.Model):
    name = CharField()
    start_date = DateTimeField()
    duration = IntegerField(help_text='hours')
    end_date = DateTimeField()

def save(self, *args, **kwargs):
    self.end_date = self.start_date + datetime.timedelta(days=self.duration)
    super(Period, self).save(*args, **kwargs)

2), :

finished = Period.objects.filter(end_date__lt=datetime.datetime.now())
+1

Source: https://habr.com/ru/post/1658663/


All Articles