我有一个看起来是这样的
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)它有两个与之相关的模型:
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',)现在,逻辑基本上是计算出喜欢的数量+随时间衰减的评论数量:
likes + comments / now() - post.created我已经创建了这个逻辑的sql版本,现在我使用django额外创建了:
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,但它无法工作,因为它是一个查询集。
如需更多信息,请提供任何帮助。
发布于 2014-07-01 13:38:35
请允许我将相关名称更改为更有意义的名称。
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' )现在你可以做了
post = Post.objects.get(pk=1)
output = ( post.likes.all().count() + post.comments.all().count() ) / ( now() - post.created )更新
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中对其进行排序。
https://stackoverflow.com/questions/24495793
复制相似问题