2016-11-30 22 views
0

我有一个模型,有回复,模板中回复最高的应该是第一个。order_by在sqlite中正常工作,但不在postgres中

在我的本地机器上它正确地到达服务器回复但是基于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}) 
+0

upvote模型的什么部分,你试图命令?它是否有任何指定的顺序? – Sayse

+0

Upvote字段应该是第一个数字。 –

回答

2

与最upvotes给予好评场数应该是第一个。

这不是你的排序是干什么的,在所有

docs

如果试图通过一个字段是另一种模式的关系,Django会订购如果没有指定Meta.ordering,则使用相关模型的默认排序,或者按相关模型的主键排序。

如果你想用的东西计数命令,那么你就需要先对其进行批注,然后以便基于该

你的观点是在谈论一个不同的模式,一个你”已经显示,但解决方案仍然看起来类似于下面

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

本地机器如何与我的代码一起工作! –

+0

@PulkitSharma - 纯粹的运气。 – Sayse

+1

本地机器与您的代码一起工作,因为它是纯粹的运气,或者因为您使用的是较小的RDBMS。 Postgresql更接近标准合规性和sqlite – e4c5

相关问题