У меня есть модель Django, в которой есть поля publish_date и is_published. Я создал менеджер для этой модели, который возвращает все опубликованные элементы, что означает: каждый элемент, у которого is_published=True и publish_date ‹= сейчас.
class PublishedTextManager(models.Manager):
"""
Filters out all unpublished items and items with a publication date in the future
"""
def get_query_set(self):
return super(PublishedTextManager, self).get_query_set() \
.filter(is_published=True) \
.filter(publication_date__lte=timezone.now())
Представление, использующее этот менеджер, выглядит так:
class NewsAndEventsOverView(ListView):
model = News
queryset = News.published.all().order_by('-publication_date')
context_object_name = 'news_list'
def get_context_data(self, **kwargs):
# Initialize context and fill it with default data from NewsAndEventsOverView super class
context = super(NewsAndEventsOverView, self).get_context_data(**kwargs)
# Add view specific context
context['latest_news_item'] = context['news_list'][0]
today = timezone.now()
yesterday = today - timedelta(days=1)
context['upcoming_events_list'] = Event.published.filter(Q(date_end__gt=yesterday) | Q(date_start__gt=yesterday)).order_by('date_start')
past_events_list = Event.published.filter(Q(date_end__lt=today) | Q(date_start__lt=today)).order_by('-date_start')
old_news_list = context['news_list'][1:]
context['old_news_and_events_list'] = sorted(chain(old_news_list, past_events_list), key=lambda x: x.publication_date, reverse=True)
return context
Соответствующий urls.py:
from .views import NewsAndEventsOverView
urlpatterns = patterns('',
# Index page
url(r'^$', NewsAndEventsOverView.as_view(), name="newsandevents_overview"),
)
Когда я добавляю новость по умолчанию, она получает текущую дату и время (timezone.now()) в качестве даты публикации, однако, когда я обновляю страницу, она не отображается во внешнем интерфейсе, пока я не перезапущу сервер (используя встроенный django -в серверном банкомате). Я нахожусь в амстердамском времени (+2:00), и когда я добавляю 2 часа к фильтру публикации_даты, он работает нормально, поэтому, поскольку я новичок в осведомленности о дате и времени, я предполагаю, что делаю что-то не так. Я пробовал timezone.now с скобками и без них, но это не имеет значения.
@never_cache
в своем представлении. - person Rohan   schedule 28.08.2013url(r'^$', never_cache(NewsAndEventsOverView.as_view()), name="newsandevents_overview"),
. Это не сработало. - person Heyl1   schedule 28.08.2013