【发布时间】:2020-10-08 13:43:54
【问题描述】:
我有一个模型Student 和经理StudentManager,如下所示。由于属性通过在join_date 中添加college_duration 来给出最后日期。但是当我执行这个属性计算时运行良好,但是对于StudentManager 它给出了一个错误。如何编写使用模型字段动态计算某些字段并用于过滤记录的管理器类。
计算域不在模型域中。不过,我希望它作为过滤条件。
class StudentManager(models.Manager):
def passed_students(self):
return self.filter(college_end_date__lt=timezone.now())
class Student(models.Model):
join_date = models.DateTimeField(auto_now_add=True)
college_duration = models.IntegerField(default=4)
objects = StudentManager()
@property
def college_end_date(self):
last_date = self.join_date + timezone.timedelta(days=self.college_duration)
return last_date
Django 给出的错误。当我尝试访问Student.objects.passed_students()
django.core.exceptions.FieldError: Cannot resolve keyword 'college_end_date' into field. Choices are: join_date, college_duration
【问题讨论】:
-
你没有。数据库对属性等一无所知,因此无法对此进行过滤。您可以利用
.annotate(..)将逻辑移至数据库端。
标签: python django django-models django-managers