Похоже, Django кэширует datetime.now()

У меня есть модель, которая выглядит так:

class Item(models.Model):
    ...
    publish_date = models.DateTimeField(default=datetime.datetime.now)
    ...

И менеджер, который выглядит так:

from datetime import datetime

class ItemManager(Manager):
    def published(self):
        return self.get_query_set().filter(publish_date__lte=datetime.now()

И вид, который выглядит так:

class ItemArchive(ArchiveIndexView):
    queryset = Item.objects.published()
    date_field = 'publish_date'

Идея в том, что я могу вызвать Item.objects.published()и получить набор запросов всех опубликованных Items.

Проблема в том, что Django, похоже, выполняет вызов datetime.now()в диспетчере при запуске сервера, а затем кэширует это значение. Итак, если сегодня 24 мая, и я создал Itemс датой публикации 23 мая и запустил сервер 22 мая, этот элемент от 23 мая не будет отображаться в ItemArchive. ] Посмотреть. Как только я перезапускаю Apache, элемент 23 мая отображается в представлении правильно.

Как заставить Django выполнять datetime.now()при каждом вызове менеджера?

5
задан user1272534 24 May 2012 в 16:05
поделиться