2017-01-10 2 views
0

Ich versuche, alle Objekte eines Modells auf der Grundlage der Differenz von Feldwerten und einer Variablen aufzulisten. Zum Beispiel versuche ich Objekte zu ziehen, die seit 3 ​​Tagen oder mehr erstellt wurden. So versuche ich, die Modelle zur Abfrage alsVergleich der zurückgegebenen Differenz von Feldern mit einer Variablen in django queryset

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() 

folgt Dies gibt mir einen Fehler, wenn ich es in der Shell ausgeführt als

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

Bitte Beratung folgt. Ich bin mit django 1.5.12

+3

Django 1.5.12 aktualisieren, aber warum? –

+0

F Ausdrücke nur kam über Django 1.8+ michinks – e4c5

+0

@MosesKoledoye Upgrade erfordert eine Menge Code Überprüfung, daher haben wir die gleiche Version seit einer Weile verwendet. Braucht bald ein Upgrade. –

Antwort

4

Ich glaube nicht, dass Sie überhaupt die Anmerkung benötigen, sollten Sie nur in der Lage sein, zu filtern, zu dem Zeitpunkt hinzugefügt, dass älter als 3 Tage alt ist

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

Auch , sollten Sie auf eine unterstützte Version von Django

+1

+ für das bisschen über die Modernisierung – e4c5

+1

@Sayse Vielen Dank. Es funktionierte ohne Anmerkung. –