Python 3 Django Rest Framework - у объекта Manager нет атрибута error - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь объединить фильтр в настраиваемом свойстве с фильтром в отношении отношения в настраиваемом менеджере, но продолжаю сталкиваться с той же ошибкой.

Мой настраиваемый 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.

Как я могу использовать его в своем менеджере для дальнейшей фильтрации заявок?

1 Ответ

0 голосов
/ 15 апреля 2020

Свойства модели нельзя использовать для фильтрации набора запросов, поскольку эти значения (end_date s) не существуют в базе данных, а вместо этого они получены из данных, находящихся в базе данных (а именно 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))
...