Skip to content
Advertisement

django: datediff sql queries?

I’m trying to do the equivalent of the following SQL in Django:

SELECT * FROM applicant WHERE date_out – date_in >= 1 AND date_out – date_in <= 6

I can do this as a RAW sql query, but this is becoming frustrating in dealing with a RawQuerySet instead of a regular QuerySet object as I would like to be able to filter it later in the code.

Advertisement

Answer

You can use the extra() method and pass in a where keyword argument. The value of where should be a list that contains the SQL WHERE clause of the query above. I tested this with Postgresql 8.4 and this is what it looked like in my case:

q = Applicant.objects.extra(where = ["""date_part('day', age(date_out, date_in)) >= 1 and
      date_part('day', age(date_out, date_in)) <= 6"""])

This will return you a valid QuerySet instance.

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement