是否可以使用可调用的 order_by ?
重复: 使用 Django 自定义模型order_by() 中的方法属性
我有两个模型;一个存储帖子,另一个存储对这些帖子进行的投票,使用外键字段进行关联。每个投票都存储为单独的记录,因为我需要跟踪投票的用户和日期时间。
我创建了一个辅助函数,它使用 Django 1.1 聚合 Sum 函数来统计所有投票。
class Post(models.Model):
...some fields...
def tally(self):
return self.vote_set.all().aggregate(Sum('value'))['value__sum'] or 0
class Vote(models.Model):
post = models.ForeignKey(Post)
value = models.IntegerField()
...some fields...
我需要进行的一个查询需要对计数进行一次性 order_by
操作。但是:
Post.objects.all().order_by('tally')
会产生以下模板错误:
渲染时捕获异常: 无法将关键字“tally”解析为 场地。选项有:创建日期、 描述、id、is_active、名称、 相关、slug、用户、投票
有什么方法可以让 order_by()
函数接受可调用吗?
DUPLICATE: Using a Django custom model method property in order_by()
I have two models; one that stores posts and another that stores votes made on those posts, related using a ForeignKey field. Each vote is stored as a separate record since I need to track the user and datetime that the vote was cast.
I've created a helper function that tallys all the votes using the Django 1.1 aggregation Sum function.
class Post(models.Model):
...some fields...
def tally(self):
return self.vote_set.all().aggregate(Sum('value'))['value__sum'] or 0
class Vote(models.Model):
post = models.ForeignKey(Post)
value = models.IntegerField()
...some fields...
One query I need to make needs to do a one off order_by
of the tally. However:
Post.objects.all().order_by('tally')
yields the following template error:
Caught an exception while rendering:
Cannot resolve keyword 'tally' into
field. Choices are: date_created,
description, id, is_active, name,
related, slug, user, vote
It there any way to get the order_by()
function to take a callable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
事实证明 Annotate 方法是解决方案:
It turns out the Annotate method was the solution: