2017-01-10 3 views
0

Я пытаюсь перечислить все объекты модели на основе разности значений полей и переменной. Например, я пытаюсь вытащить объекты, созданные с 3 или более дней. Так что я пытаюсь запросить модели следующим образомСравнение возвращаемой разности полей с переменной в 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() 

Это дает мне ошибку, когда я запускаю его в оболочке следующего

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

Пожалуйста совет. Я использую Джанго 1.5.12

+3

Django 1.5.12, но почему? –

+0

Выражения F только пришли о django 1.8+ methinks – e4c5

+0

@MosesKoledoye, для его обновления требуется много обзоров кода, поэтому мы использовали ту же версию с течением времени. В ближайшее время потребуется обновление. –

ответ

4

Я не думаю, что вам нужна аннотация на всех, вы должны просто быть в состоянии фильтровать на дату добавила, что старше 3 дней

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

Также , вы должны перейти на поддерживаемую версию django

+1

+ за бит об обновлении – e4c5

+1

@Sayse Большое спасибо. Он работал без аннотации. –

Смежные вопросы