2017-01-10 5 views
0

J'essaye de lister tous les objets d'un modèle basé sur la différence des valeurs de champ et une variable. Par exemple, j'essaie de tirer des objets qui ont été créés depuis 3 jours ou plus. Donc, je suis en train d'interroger les modèles suivantsCompare la différence renvoyée de champs avec une variable dans le jeu de queues django

import datetime 
from myapp_books.models import Book 
from django.db.models import F 

current_date = datetime.date.today() 
books = Book.objects.annotate(day_difference=F('date_added__date') - current_date).filter(day_difference__gte=3) 
books.count() 

Cela me donne une erreur quand je le lance dans la coquille comme suit

AttributeError: 'ExpressionNode' object has no attribute 'lookup' 

conseils S'il vous plaît. J'utilise django 1.5.12

+3

Django 1.5.12, mais pourquoi? –

+0

Les expressions F ne sont apparues que sur django 1.8+ methinks – e4c5

+0

@MosesKoledoye la mise à jour nécessite beaucoup de révision de code, donc nous utilisons la même version depuis un moment. Besoin d'une mise à niveau bientôt. –

Répondre

4

Je ne pense pas que vous avez besoin de l'annotation du tout, vous devez simplement être en mesure de filtrer à la date a ajouté que est de plus de 3 jours

Book.objects.filter(date_added__date__gte=datetime.now()-timedelta(days=3)) 

également , vous devriez mettre à niveau vers une version supportée de django

+1

+ pour le peu à propos de la mise à niveau – e4c5

+1

@Sayse Merci beaucoup. Cela a fonctionné sans annotation. –