Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как выбрать запись из запроса находящуюся между диапазонами дня и месяца. [RSS Feed]

#1 Апрель 19, 2013 11:58:09

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.

Привет.
Есть форма:

class DateForm(forms.Form):
    date = forms.DateField(widget=SelectDateWidget(years=range(2013, 2000, -1)))
Есть модель:
class DMY(models.Model):
    name = models.CharField()
    start_date = models.DateField()
    end_date = models.DateField(blank=True, null=True)
Во вьюхе получаю значение поля date из формы:
form = DateForm(request.POST or None)
    if form.is_valid():
        form_date = form.cleaned_data.get('date')
# Теперь вопрос!
# Мне нужно получить все записи из модели DMY где день (form_date.day) и месяц (form_date.month) находятся в диапазоне между start_date и end_date
# Год значения не имеет!
# Как правильно составить запрос?
На примере.
start_date end_date
———————————–
01.04.2013 21.05.2013

Дата введённая пользователем: 19.04.2013
Так - как 19.04 находится между 01.04 и 21.05, то запись будет найдена!

Ещё пример:
start_date end_date
———————————–
01.05.2013 21.05.2013

Дата введённая пользователем: 19.04.2013
Так - как 19.04 не находится между 01.05 и 21.05, то запись не будет найдена!

Отредактировано MikaMika (Апрель 19, 2013 12:02:04)

Офлайн

#2 Апрель 19, 2013 13:58:26

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.

qs = DMY.objects.filter(start_date__lt=_my_date, end_date__gt=_my_date)

Отредактировано inoks (Апрель 19, 2013 13:59:14)

Офлайн

#3 Апрель 19, 2013 14:44:51

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.

Это понятно.
Но такой запрос учитывает - год!
А мне нужен только диапазон среди дней и месяцев.

Офлайн

#4 Апрель 19, 2013 16:56:49

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.

Используйте условия на дату и месяц в запросе
https://docs.djangoproject.com/en/1.0/ref/models/querysets/#year

Офлайн

#5 Апрель 19, 2013 19:13:48

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.

Что-то сомневаюсь, что в Django-ORM одним запросом это можно сделать.
Еще пример посложнее.
Дано: 25.04.2013 01.06.2013
Ввод: 23.05, 02.06

Офлайн

#6 Апрель 20, 2013 05:26:27

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.

inoks
Используйте условия на дату и месяц в запросеhttps://docs.djangoproject.com/en/1.0/ref/models/querysets/#year
Да, это здорово!
Вот только например:
q = DMY.objects.get(date__start_date__year__gt=2013)

фильтры у __year не работают:
FieldError: Join on field ‘start_date’ not permitted. Did you misspell ‘year’ for the lookup type?

Отредактировано MikaMika (Апрель 20, 2013 05:26:50)

Офлайн

#7 Апрель 20, 2013 12:59:16

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.

Вариант 1: - создавать набор _my_date в диапазоне возможных лет и проходить объединенным запросом с условием наподобие filter(start_date__lt=_my_date, end_date__gt=_my_date).

Вариант 2: - сохранять в модели значения месяца и даты в отдельные поля и фильтровать по ним.

Офлайн

  • Начало
  • » Django
  • » Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version