首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django extras() -逻辑/算法

Django extras() -逻辑/算法
EN

Stack Overflow用户
提问于 2014-06-30 17:37:42
回答 1查看 64关注 0票数 1

我有一个看起来是这样的

代码语言:javascript
复制
class Post(models.Model):
    user = models.ForeignKey(Profile, related_name='posts')

    created = models.DateTimeField(auto_now_add=True)
    description = models.CharField(max_length=100, null = True)

它有两个与之相关的模型:

代码语言:javascript
复制
class Comments(models.Model):
    user = models.ForeignKey(Profile, related_name='author')
    post = models.ForeignKey(Post, related_name='posts')


class Likes(models.Model):
    user = models.ForeignKey(Profile, related_name='liker')
    post = models.ForeignKey(Post, related_name='post' )
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('created',)

现在,逻辑基本上是计算出喜欢的数量+随时间衰减的评论数量:

代码语言:javascript
复制
likes + comments / now() - post.created

我已经创建了这个逻辑的sql版本,现在我使用django额外创建了:

代码语言:javascript
复制
s = Post.objects.extras(select={'post':'logic here...... WHERE id = %d} % **MISSING PIECE THAT ALLOWS ME TO ITERATE OVER THE POST OBJECTS**)

有人能帮我弄清楚丢失的那件东西是什么吗?我尝试使用Post.objects.all().id,但它无法工作,因为它是一个查询集。

如需更多信息,请提供任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-01 13:38:35

请允许我将相关名称更改为更有意义的名称。

代码语言:javascript
复制
class Post(models.Model):
    user = models.ForeignKey(Profile, related_name='posts')

class Comments(models.Model):
    user = models.ForeignKey(Profile, related_name='comments')
    post = models.ForeignKey(Post, related_name='comments')

class Likes(models.Model):
    user = models.ForeignKey(Profile, related_name='likes')
    post = models.ForeignKey(Post, related_name='likes' )

现在你可以做了

代码语言:javascript
复制
post = Post.objects.get(pk=1)
output = ( post.likes.all().count() + post.comments.all().count() ) / ( now() - post.created )

更新

代码语言:javascript
复制
class Post(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)

    def output(self):
        return ( self.likes.all().count() + self.comments.all().count() ) / (datetime.datetime.now() - self.created_at).total_seconds()

thelist = sorted(Post.objects.all(), key: lambda p : p.output)

据我所知,您无法在与数据库无关的事情上对列表进行排序。因此,根据您的需要获取信息,并在Python中对其进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24495793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档