【发布时间】:2014-07-23 19:27:47
【问题描述】:
我有一个 项目 模型,其中包含 DateTimeField 和持续时间 PositiveIntegerField 字段。
该模型还有一个函数 days_left 实现相对复杂的逻辑来计算距离到期还剩多少天。该函数返回一个整数。
我想根据这个函数返回的值执行一个简单的查询集排序。
Project.objects.all().order_by('days_left')
但是我不断收到一个例外,即 days_left 不是一个字段。
在本机 SQL 中是否有任何有效的方法(可能通过视图等)并绕过查询集,或者是否存在针对此类情况的 django 解决方案?
整个代码:
import datetime as nsdt
from django.db import models
from django.utils import timezone
class Project(models.Model):
name = models.CharField(max_length=128)
publish_date = models.DateTimeField()
duration_days = models.PositiveIntegerField()
def days_left(self):
t1 = timezone.now()
t2 = self.publish_date + nsdt.timedelta(days=self.duration_days)
return (t2 - t1).days if t2 > t1 else 0
if __name__ == '__main__':
print Project.objects.all().order_by('days_left')
# throws excpetion:
# django.core.exceptions.FieldError: Cannot resolve keyword 'days_left_computed' into field.
【问题讨论】:
标签: python django sql-order-by django-queryset calculated-field