Найти - Пользователи
Полная версия: Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.
Начало » Django » Как выбрать запись из запроса находящуюся между диапазонами дня и месяца.
1
MikaMika
Привет.
Есть форма:
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, то запись не будет найдена!

inoks
qs = DMY.objects.filter(start_date__lt=_my_date, end_date__gt=_my_date)
MikaMika
Это понятно.
Но такой запрос учитывает - год!
А мне нужен только диапазон среди дней и месяцев.
inoks
Используйте условия на дату и месяц в запросе
https://docs.djangoproject.com/en/1.0/ref/models/querysets/#year
reclosedev
Что-то сомневаюсь, что в Django-ORM одним запросом это можно сделать.
Еще пример посложнее.
Дано: 25.04.2013 01.06.2013
Ввод: 23.05, 02.06
MikaMika
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?
inoks
Вариант 1: - создавать набор _my_date в диапазоне возможных лет и проходить объединенным запросом с условием наподобие filter(start_date__lt=_my_date, end_date__gt=_my_date).

Вариант 2: - сохранять в модели значения месяца и даты в отдельные поля и фильтровать по ним.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB