首页 > 解决方案 > Python 3 Django Rest Framework - Manager 对象没有属性错误

问题描述

我正在尝试将自定义属性上的过滤器与自定义管理器中关系上的过滤器结合起来,但仍然遇到相同的错误。

我的自定义 EnrollmentManager 说对象没有属性“end_date”:

class EnrollmentManager(models.Manager):
  def org_students_enrolled(self, organisation):
    return self.filter(student__organisation__name=organisation).filter(self.end_date.date() >= datetime.date.today())

class Enrollment(TimeStampedModel):
  objects = EnrollmentManager()
  course = models.ForeignKey(to=Course, on_delete=models.CASCADE, default=None, null=False)
  student = models.ForeignKey(to=Student, on_delete=models.CASCADE, default=None, null=False)
  enrolled = models.DateTimeField()
  last_booking = models.DateTimeField()
  credits_total = models.SmallIntegerField(default=10)
  credits_balance = models.DecimalField(max_digits=5, decimal_places=2)

  @property
  def end_date(self):
    return self.enrolled + datetime.timedelta(days=182)

end_date是 上的自定义属性Enrollment

如何在我的经理中使用它来进一步过滤注册?

标签: pythondjangodjango-rest-framework

解决方案


模型属性不能用于过滤查询集,因为这些值(end_dates)在数据库中存在,而是从数据库中的数据(即enrolled)派生而来。为了实现这一点,您必须编写过滤器以使用模型字段中的数据,如下所示:

class EnrollmentManager(models.Manager):
  def org_students_enrolled(self, organisation):
    return self.filter(student__organisation__name=organisation).filter(enrolled__gte=datetime.date.today() - datetime.timedelta(days=182))

推荐阅读