0

Я пытаюсь отобразить только объекты, которые не старше, чем 4 дня. Я знаю, что могу использовать фильтр:Как назвать метод модели?

new = Books.objects.filter(pub_date__gt = datetime.now() - timedelta(days=4)) 

но я действительно хочу использовать модальный метод упражнений.

Метод определен в книге модели и называется publish_recetnly.

Итак, мой вопрос в том, как вызвать модальный метод в views.py?

Это мой текущий код:

views.py

def index(request): 
    new = Books.objects.filter(pub_date__gt = datetime.now() - timedelta(days=4)) 
    return render_to_response('books/index.html', {'new':new}, context_instance=RequestContext(request)) 

index.html

{% if book in new %} 
    {{ book.title }} 
{% endif %} 

models.py

class Book(models.Model) 
    pub_date = models.DateTimeField('date published') 

    def published_recently(self): 
     now = timezone.now() 
     return now - datetime.timedelta(days=4) <= self.pub_date <= now 

ответ

5

Может быть, вы должны использовать менеджер в этом случае. Это более понятно, и вы можете использовать его для извлечения всех опубликованных недавно книг.

from .managers import BookManager  
class Book(models.Model) 
    pub_date = models.DateTimeField('date published') 
    objects = BookManager() 

Установить как этот файл менеджеры:

class BookManager(models.Manager): 
    def published_recently(self,): 
     return Books.objects.filter(pub_date__gt = datetime.now() - timedelta(days=4)) 

И теперь, вы можете отфильтровать более четко в файле взглядов.

Books.objects.published_recently() 

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

  • Нет связанных вопросов^_^