基本上标题说明了一切:如何通过可存储在数据库中的可调用方法结果来命令将在API上返回的查询集?
此字段是动态的,取决于每个用户的请求,因此无法存储在任何位置。
我尝试过使用,这就是我想要实现的目标:
queryset = Post.objects.filter('my_filters').order_by('my_method')
但它不起作用,因为它必须是数据库中的一列。
我也尝试过:
queryset = sorted(Post.objects.filter('my_filters'), key=lambda x: x.my_method())
但它会抛出" AttributeError:' list'对象没有属性' model'"错误。
如何根据方法对查询集的结果进行排序?有任何想法吗? 我还需要限制以这种方式计算的最高结果的响应次数。
谢谢!
修改
' my_filters'在这种情况下,只检查一个布尔属性
.filter(active=True)
和my_method检查与timezone.now()相比的经过时间:
def microseconds_elapsed(self):
return getMicrosecondsElapsed(self.datetime)
,其中
def getMicrosecondsElapsed(datetime):
timedelta = timezone.now() - datetime
microseconds = 0
microseconds += timedelta.microseconds
microseconds += timedelta.seconds*1000000
microseconds += timedelta.days*86400000000
return microseconds
我使用annotate和PostgreSQL函数取得了一些进展:
get_queryset().annotate(time_elapsed=Func(F('datetime'), function='age'))
但这会导致django错误
float()参数必须是字符串或数字
在这种情况下,我只需要从对象中存储的datetime字段中获取经过的微秒数,这样我就可以继续进行另一次计算了。
任何人都知道发生了什么,我怎么能实现这个目标?
谢谢!