Given two simple models:
class Employee(Model):
user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True)
class AttendanceLog(Model):
from_datetime = models.DateTimeField(_('from'))
to_datetime = models.DateTimeField(_('to'))
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, verbose_name=_('employee'))
We can retrieve some_employee
's attendance logs just fine: some_employee.attendancelog_set
. We can also use custom queryset in attendance log (objects = AttendanceLogQuerySet.as_manager()
), such as:
class AttendanceLogQuerySet(models.QuerySet):
def today(self):
# returns logs that has to_datetime with today's date.
return self.filter(
to_datetime__date=date.today()
)
And so we can retrieve employee's attendance for today by doing:some_employee.attendancelog_set.today()
The problem is when we try to use both custom Manager and custom Queryset (objects = AttendanceLogManager()
), such as:
class AttendanceLogQuerySet(models.QuerySet):
def today(self):
# returns logs that has to_datetime with today's date.
return self.filter(
to_datetime__date=datetime.today()
)
class AttendanceLogManager(models.Manager):
def get_queryset(self):
return AttendanceLogQuerySet(self.model, using=self._db)
def some_special_create_method(self, some_args):
pass
We get an error:
AttributeError: 'RelatedManager' object has no attribute 'today'
This should work according to documentation on how to use both QuerySet and a Manager.