order_by在sqlite中正常工作但在postgres中没有

时间:2016-11-30 08:04:41

标签: django django-models django-views

我有一个带有回复的模型,在模板中,应该首先提出具有最高upvote的回复。

在我的本地计算机中,它正确地在服务器回复中正确地根据upvote字段的FK进行过滤。

型号:

class solution(models.Model):
    doubt=models.ForeignKey(doubts,related_name='answers')
    reply=models.TextField()
    snapshot = models.FileField(upload_to='support',null=True,blank=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    user=models.ForeignKey(settings.AUTH_USER_MODEL,null=True,blank=True)
    upvote = models.ManyToManyField(User,related_name='upvoteuser')

    @property
    def total_upvotes(self):
        return self.upvote.count()

    def __str__(self):
        return str(self.doubt)

查看

def ticketdetails(request,slug,pk):
    ticketis=doubts.objects.get(pk=pk)
    replies = ticketis.answers.all().order_by('-upvote')


    if request.method== 'POST':
        form=replyform(request.POST)
        if form.is_valid():
            new_form=form.save(commit=False)
            new_form.user=request.user
            new_form.doubt=ticketis
            new_form.save()
            form=replyform()
            return HttpResponseRedirect(reverse('ticketdetail',kwargs={'slug':ticketis.slug,'pk':ticketis.id}),messages.add_message(request, messages.SUCCESS,'Response submitted succesfully.'))
    else:
        form=replyform()    
    return render(request,'ticketview.html',{'ticketis':ticketis,'replies':replies,'form':form})

1 个答案:

答案 0 :(得分:2)

  

具有最多upvotes计数的Upvote字段应该是第一个。

这不是你的订单所做的,

来自docs

  

如果您尝试按与另一个模型相关的字段进行排序,Django将使用相关模型的默认排序,或者如果没有指定Meta.ordering则按相关模型的主键排序。

如果您尝试按某事物的数量进行排序,则需要先对其进行注释,然后再根据该数量进行排序

您的观点是与您展示的模型不同,但解决方案仍然类似于下面

 Solution.objects.annotate(upvote_count=Count('upvote')).order_by('upvote_count')