Procedure.objects.filter(is_active=False).by_validity()
I've tried using q = self or q = self.query before apply Q(start_date__lte=start_date) & (Q(end_date=None) | Q(end_date__gte=end_date)) , But it did not work, I got errors.
Thanks.
sample code:
from datetime import date, datetime, time
from django.conf import settings
from django.db import models
from django.db.models import Q
class ProcedureQuerySet(models.QuerySet):
def by_validity(self, start_date=None, end_date=None):
if not start_date:
start_date = date.today()
if start_date and not end_date:
end_date = start_date
if end_date < start_date:
raise ValueError("end_date must be greater than start_date")
start_date = datetime.combine(start_date, time.min)
end_date = datetime.combine(end_date, time.max)
q = Q(start_date__lte=start_date) & (Q(end_date=None) | Q(end_date__gte=end_date))
return self.filter(q)
class ProcedureManager(models.Manager.from_queryset(ProcedureQuerySet)):
pass
class Procedure(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField(null=True)
is_active = models.BooleanField(default=True)
objects = ProcedureManager()