2016-11-30 5 views
0

私は応答があるモデルを持っており、テンプレートでは最高のupvoteを持つ回答が最初に来るはずです。order_byはうまく働いていますが、postgresではありません

私のローカルマシンでは、サーバ応答は正しくupvoteフィールドのFKに基づいてフィルタリングされます。

モデル:最もupvotesと

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の数が最も多いUpvoteフィールドを先頭にする必要があります。 –

答えて

2

Upvoteフィールドが最初にあるべきカウント

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) 

ビュー。

これはあなたの順序はdocsからすべて

で、やっていることではありません:あなたは別のモデルに関連しているフィールドで注文しようとした場合、

Djangoの意志関連するモデルのデフォルトの順序付けを使用するか、Meta.orderingが指定されていない場合は、関連するモデルの主キーによって順序付けします。

あなたが何かのカウントで注文しようとしているなら、あなたは最初にそれに注釈を付ける必要がありますし、次にあなたの視野はあなた」1に別のモデルについて話している

に基づく順序表示されていますが、解決方法はまだ以下のようになります

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

ローカルマシンはどのように私のコードで動作するのですか? –

+0

@PulkitSharma - 純粋な運。 – Sayse

+1

ローカルマシンは、純粋に運が良かったり、少ないRDBMSを使用しているために、あなたのコードで動作します。 PostgreSQLは標準コンプライアンスとsqliteに非常に近い – e4c5

関連する問題