我有一个带有回复的模型,在模板中,应该首先提出具有最高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})
答案 0 :(得分:2)
具有最多upvotes计数的Upvote字段应该是第一个。
这不是你的订单所做的,
来自docs:
如果您尝试按与另一个模型相关的字段进行排序,Django将使用相关模型的默认排序,或者如果没有指定Meta.ordering则按相关模型的主键排序。
如果您尝试按某事物的数量进行排序,则需要先对其进行注释,然后再根据该数量进行排序
您的观点是与您展示的模型不同,但解决方案仍然类似于下面
Solution.objects.annotate(upvote_count=Count('upvote')).order_by('upvote_count')