Даны две простые модели:
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'))
Мы можем запросто получить журнал посещаемости some_employee
: some_employee.attendancelog_set
. Мы также можем использовать пользовательский набор запросов в журнале посещаемости (objects = AttendanceLogQuerySet.as_manager()
), например:
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()
)
Итак, мы можем получить посещаемость сотрудника за сегодня, выполнив:some_employee.attendancelog_set.today()
Проблема заключается в том, что мы пытаемся использовать как пользовательский менеджер, так и пользовательский набор запросов (objects = AttendanceLogManager()
), например:
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
Получаем ошибку: AttributeError: 'RelatedManager' object has no attribute 'today'
Это должно работать в соответствии с документация о том, как использовать как QuerySet, так и Manager.
use_for_related_fields = True
возникает ошибка. (Я использую версию 1.1.9, поэтому она еще не устарела) - person emihir0   schedule 08.01.2018