Django: Django QuerySet с датой SELECT работает беспорядочно - PullRequest
0 голосов
/ 25 марта 2011

Еще пару дней назад я успешно использовал следующий запрос.Следующий запрос всегда возвращал данные, которые он должен был вернуть:

try:
  totals = MyObject.objects.get(date=report_date)
except MyObject.DoesNotExist:
  return HttpResponse('Could not find totals from %s' % (report_date))

Пару дней назад этот запрос начал возвращать пустой QuerySet, даже если данные существуют на день, который я запрашиваю.

Я получаю дату из report_date = date.today().strftime('%Y-%m-%d') или из формы

if request.method == 'POST':
  form = DateForm(request.POST)
  if form.is_valid:
    report_date = request.POST['date']

Модель проста поле даты ()

class MyObject(models.Model):
  """Total numbers for a specific day"""
  date = models.DateField()
  ... remaining fields ...

Я проверил через оболочку, что естьНа самом деле данные на сегодняшний день в TotalTransactions.Я использую этот код в течение нескольких месяцев без проблем.Вчера я поработал, запросив totals = MyObject.objects.get(date__gte=report_date, date__lte=report_date), но сегодня утром он больше не работал !!Сегодня утром я попробовал исходный запрос date=report_date, и он сработал!

Итак, мой вопрос: у кого-нибудь была эта проблема раньше?Может ли кто-нибудь увидеть в моем коде что-то, что мне не хватает?Любые предложения о дополнительных обходных путей?Я ценю ваше время.

Ответы [ 2 ]

1 голос
/ 25 марта 2011

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

переключается на date объекты и устанавливается только в представлениях:

report_date = date.today()

и получите данные из cleaned_data dict формы:

report_date = form.cleaned_data['date']
0 голосов
/ 25 марта 2011

Тот факт, что основанные на дате запросы работают один день, но не следующий, наводит на мысль.Я подозреваю - хотя вы не показали достаточно кода, чтобы быть уверенным - что вы случайно установили некоторые значения по умолчанию, которые сохраняются в запросах.

Например, если вы делаете это:

class MyModel(models.Model):
    my_date_field = model.DateField(default=datetime.date.today())

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

То же самое верно, если вы делаетеэто в представлении:

def my_view(request, date=datetime.date.today()):
    ... do something with date ...

, поскольку аргументы представления снова оцениваются при определении представления, а не при его выполнении, и, следовательно, значение останется таким же, пока существует процесс.

...