Форум сайта python.su
Цель — из базы выбрать сотрудников у которых день рождение в течении ближайших двух недель.
Возможно ли это сделать через запрос к базе?
Пока сделал через перебор с отсеиванием полученного из базы списка, но чувствую что можно проще:
Модель:
class Employee(models.Model):
last_name = models.CharField(max_length=30)
birthday = models.DateField(blank=True, null=True)
today = date.today().timetuple().tm_yday
dist = today + 14
dataset = Employee.objects.all()
birthdays = []
for i in dataset:
if i.birthday and i.birthday.timetuple().tm_yday <= dist and i.birthday.timetuple().tm_yday >= today:
birthdays.append({
'last_name': i.last_name,
'birthday': i.birthday})
Отредактировано (Май 18, 2011 17:57:12)
Офлайн
Код не проверял, но надеюсь общий смысл понятен.
end_date = date.today()
start_date = today - timedelta(14)
empl_birth_days = Employee.objects.filter(
(Q(birthday__month=start_date.month)&Q(birthday__day__gte=start_date.day))|Q(birthday__month__gt=2start_date.month)
).filter(
(Q(birthday__month=end_date.month)&Q(birthday__day__lte=end_date.day))|Q(birthday__month__lt=end_date.month)
).all()
Офлайн
Спасибо огромное :)
Интуиция не подвела ;) Только неделю как начал Django изучать, всю документацию еще не осилил…
Офлайн
А как реализовать вот такую конструкцию в запросе правильно? Что-то никак найти не могу :(
birthday__day__gte=start_date.day
Join on field 'birthday' not permitted. Did you misspell 'day' for the lookup type?
Офлайн