python - 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
。
如何在我的经理中使用它来进一步过滤注册?
解决方案
模型属性不能用于过滤查询集,因为这些值(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))
推荐阅读
- python - 如何通过名称找出正在运行的 python 脚本的 psid?
- python - Protobuf 将 int64 数据类型编码为 json 映射中的字符串
- java - 使用 USB 打印机打印 pdf
- c - 关于 C 练习 6.18-2 的指针,我的解决方案不起作用
- node.js - 用于项目更新的 Angular 预填充表单
- javascript - 为什么history.push 在路由“/”中不起作用?
- php - PHP 64 位连接到 32 位 ODBC 驱动程序
- python - gspread 和 google sheet api 不会从 google sheet 中读取一个单元格并给我超时错误
- python - python multiprocessing pool.map() 等到方法完成
- javascript - 如何将 nuxt.config.js 中的 .env 值与运行时配置一起使用