2016-10-11 1 views
1

Je cherche des objets dont le timedelta entre deux champs est supérieur à un certain nombre de jours.Timedelta entre deux champs

Baiscally J'ai une date à laquelle une lettre est envoyée, et une date à laquelle une approbation est reçue. Si aucune approbation n'est reçue dans un délai de 30 jours, ces objets doivent être inclus dans le jeu de requête.

Je peux faire quelque chose comme ci-dessous, où le delta est quelque chose de statique. Cependant, je n'ai pas besoin de datetime.date.today() pour commencer, mais j'ai besoin de comparer avec l'autre objet.

delta = datetime.date.today() - datetime.timedelta(30) 
return qs.filter(letter_sent__isnull=False)\ 
    .filter(approval_from__isnull=True)\ 
    .filter(letter_sent__gte=delta) 

Tout pointeur comment faire cela?

Répondre

5

Cela ressemble à ce que vous voulez annoter avec un objet F. Quelque chose comme ceci:

from django.db.models import DateTimeField, ExpressionWrapper, F 

delta = datetime.timedelta(days=30) 
expression = F('approval_from') - F('letter_sent') 
wrapped_expression = ExpressionWrapper(expression, DateTimeField()) 
qs = qs.objects.annotate(delta=wrapped_expression) 
qs = qs.filter(delta__gte=delta) 
+0

Merci, je pense que je peux travailler avec ça! – SaeX

+0

Correction: wrapped_expression = ExpressionWrapper (expression, DurationField()) –