Django-如何按投票对Post模型进行排序?
我正在尝试在views.py中对帖子进行排序,从最顶端到最底端的投票数最多 以下是我目前掌握的情况: 在models.py中发布模型Django-如何按投票对Post模型进行排序?,django,sorting,django-models,Django,Sorting,Django Models,我正在尝试在views.py中对帖子进行排序,从最顶端到最底端的投票数最多 以下是我目前掌握的情况: 在models.py中发布模型 class Post(models.Model): title = models.CharField("HeadLine", max_length=256, unique=True) creator = models.ForeignKey(User, on_delete= models.SET_NULL, null=True)
class Post(models.Model):
title = models.CharField("HeadLine", max_length=256, unique=True)
creator = models.ForeignKey(User, on_delete= models.SET_NULL, null=True)
created_on = models.DateTimeField(auto_now_add=True)
url = models.URLField("URL", max_length=256,blank=True)
description = models.TextField("Description", blank=True)
votes = models.IntegerField(null=True)
comments = models.IntegerField(null=True)
def __unicode__(self):
return self.title
def count_votes(self):
self.votes = Vote.objects.filter(post = self).count()
@property
def sort_by_votes(self):
return Vote.objects.filter(post = self).count()
def count_comments(self):
self.comments = Comment.objects.filter(post = self).count()
views.py中的帖子列表
def NewPostListView(request):
posts = sorted(Post.objects.all(), key=lambda p: p.sort_by_votes, reverse = True)
for post in posts:
post.count_votes()
print(post)
post.count_comments()
context = {
'posts': posts,
}
return render(request,'postlist.html', context)
我正在尝试执行类似于
posts=Post.objects.all()。到目前为止,使用sorted()
似乎有效,但有时upvote值不正确。如何获得按投票对帖子进行排序的查询集?您是否尝试过posts=Post.objects.all().order\u by('voates')
count\u voces
是Post
的方法,而不是属性。但是,投票
是。您是否尝试过posts=Post.objects.all()
count\u voces
是Post
的方法,而不是属性。但是,投票
是。因为您的函数count\u voces
调用了一个名为投票
的模型,我认为在您的Post
模型中,您有一个指向投票
模型的外键,反之亦然。如果不是,我建议去
假设这样,您可以使用
由于您的函数count\u voces
正在调用名为voces
的模型,我认为在您的Post
模型中,您有一个指向voces
模型的外键,反之亦然。如果不是,我建议去
假设这样,您可以使用
如果要将投票设置为Post模型的默认排序,可以在Post类Meta下设置排序属性
class Post(models.Model):
...
class Meta:
ordering = "-votes"
请注意负数,因为您希望按降序排序(顶部的最大值)如果您希望将投票设置为Post模型的默认排序,则可以在Post class Meta下设置排序属性
class Post(models.Model):
...
class Meta:
ordering = "-votes"
请注意负数,因为您希望按降序排序(顶部的最大值)如果投票字段可以不止一个,请使用Sum():Post.objects.values(“creator”)。注释(Count('creator')),Sum\u voces=Sum('voces')。排序依据('Sum\u voces')
。要按降序添加最小符号“-”:Post.objects.order\u依据('-voces)。如果投票字段可以不止一个,请使用Sum():Post.objects.values(“creator”)。注释(Count('creator')),Sum_voces=Sum('voces'))。排序依据('Sum_voces')
。要通过降序进行简单排序,请添加最小符号“-”:Post.objects.order_by('-voces')。他首先要的是最大的数字,所以排序依据('-voces)
更好他首先想要最大的数字,因此,按('-vots')排序更好