我试图创建一个页面,人们可以看到评分最高的文章,但有一个问题:当我过滤其他用户也喜欢的文章的数量时,它会创建一份被更新的文章的副本。
我想要的是订购博客的文章数量最多的喜欢。
models.py
class Article(models.Model):
user = models.ForeignKey(User, default='1')
[... unrelated fields ...]
likes = models.ManyToManyField(User, related_name="likes")
[... unrelated function ...]
views.py
def article_ordered_by_likes(request):
context = {'article': Article.objects.order_by('-likes')}
return render(request, 'article_ordered_by_likes.html', context)
def like_button(request):
if request.method == 'POST':
user = request.user
id = request.POST.get('pk', None)
article = get_object_or_404(Article, pk=id)
if article.likes.filter(id=user.id).exists():
article.likes.remove(user)
else:
article.likes.add(user)
context = {'likes_count': article.total_likes}
return HttpResponse(json.dumps(context), content_type='application/json')
article_ordered_by_likes.html
{% for a in article %}
[... unrelated html ...]
<h2>{{ a.titre }}</h2>
<span id="count{{ a.id }}">{{ a.total_likes }}</span>
<input type="button" class="like" id="{{ a.id }}" value="Like" />
{% endfor %}
为什么Django要多次创建同一个帖子?我怎样才能在没有这个问题的情况下,以最多的赞来订购文章呢?
发布于 2016-01-30 02:20:12
Django没有创建多个帖子。这是因为那个查询。如果你想根据相似的计数排序,那么你应该这样做,
Article.objects.annotate(like_count=Count('likes')).order_by('-like_count')
发布于 2016-01-30 02:19:00
您将需要使用annotate
。以下是如何根据“喜欢”一篇文章的用户数量来订购:
Article.objects.annotate(like_count=Count('likes')).order_by('-like_count')
https://stackoverflow.com/questions/35097130
复制相似问题