def get_births(self, year=None, month=None, day=None): if day: date = datetime.datetime(year, month, day) return self.births.filter(date=date).select_related() elif month: initial_date = datetime.datetime(year, month, 1) end_date = get_last_day_of_month(initial_date) return self.births.filter(date__gte=initial_date, date__lte=end_date).select_related() elif year: return self.births.filter(date__year=year).select_related() else: return self.births.all()
def get_animals(self, year=None, month=None, day=None): if day: date = datetime.datetime(year, month, day) return self.animals.filter( Q(entry_date__lte=date), Q(exit_date__gte=date) | Q(exit_date__isnull=True)).select_related() elif month: initial = datetime.datetime(year, month, 1) end = get_last_day_of_month(initial) return self.animals.filter( Q(entry_date__lte=initial, exit_date__gte=end) | Q(entry_date__lte=initial, exit_date__isnull=True) | Q(entry_date__range=[initial, end]) | Q(exit_date__range=[initial, end])).select_related().distinct() elif year: initial = datetime.datetime(year, 1, 1) end = datetime.datetime(year, 12, 31) return self.animals.select_related().filter( Q(entry_date__lte=initial, exit_date__gte=end) | Q(entry_date__lte=initial, exit_date__isnull=True) | Q(entry_date__range=[initial, end]) | Q(exit_date__range=[initial, end])).select_related().distinct() else: date = datetime.datetime.now() return self.animals.select_related().filter(entry_date__lte=date, exit_date__isnull=True)