【发布时间】:2018-06-15 18:40:36
【问题描述】:
给定两个简单的模型:
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()
问题是当我们尝试同时使用自定义Manager和自定义Queryset(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'
这应该根据documentation 关于如何使用 QuerySet 和 Manager 来工作。
【问题讨论】:
-
我想你正在寻找这个stackoverflow.com/a/48124863/3627387
-
即使添加
use_for_related_fields = True,也会引发错误。 (我用的是1.1.9版本所以还没有贬值)
标签: django django-models django-queryset django-managers