제품 목록을 보여주는 Django 사이트를 만들려고하고 있으며받은 총 투표 점수로 주문합니다. 'Product'는 하나의 클래스이고 'Vote'는 score라고하는 필드가 1, 0 또는 -1 일 수있는 또 다른 클래스입니다. 각 특정 제품과 관련된 투표의 점수 합계에 따라 제품을 주문하길 원합니다. 여기 Django에서 집계 합계로 쿼리를 주문했지만 예상대로 결과를 얻지 못했습니다.
내 models.py입니다 :class Product(models.Model):
Content = models.TextField()
creation_date = models.DateTimeField(default=datetime.now)
total_votes = models.IntegerField(default=0)
def __unicode__(self):
return self.content
class Vote(models.Model):
voter = models.ForeignKey(User)
product = models.ForeignKey(Product)
score = models.IntegerField(default=0, choices=VOTE_SCORE_CHOICES)
def __unicode__(self):
return '%s - %s : %s' % (self.product.id, self.voter, self.score)
그리고 여기 내 views.py입니다 :
def show_products(request):
product_list = Product.objects.all()
# set the field 'total_votes' in prduct to the sum of votes for each sentence
for p in product_list:
try:
v = Vote.objects.filter(product = p).aggregate(Sum('score'))['score__sum']
except IndexError:
v = 0
p.total_votes = v
p.save()
# get the product that has the highest vote score
try:
top_product = product_list.order_by('-total_votes')[0].content
except IndexError:
top_product = 'no product'
# reorder product_list according to total_votes
product_list = product_list.order_by('total_votes')
return render_to_response('product/product_detail.html',
{'product_list': product_list,
'top_produce': top_product,}, context_instance=RequestContext(request))
그래서 당신은 내가 각 제품과 관련된 투표에 대한 점수의 합을 얻고있다 참조 이 번호를 각 제품의 'total_votes'필드에 할당 한 다음 'total_votes'에 따라 제품 목록을 재정렬하십시오.
그러나 예상대로 결과가 나오지 않으며 제품이 투표 점수와 별도로 주문됩니다. 누군가이 코드에 어떤 문제가 있다고 말할 수 있습니까? 또한이 문제에 접근하는 것이 올바른 방법입니까?
고맙습니다.
오. 다니엘 고마워. 나는 그것을 시도 할 것이다. 그것은 지나치게 복잡하게 보였다. 그리고 예, 문장과 b에 대한 초기 참조는 제품과 p를 나타 내기위한 것입니다 (이름이 잘못 붙은 필드가 많아서 질문을 더 명확히하기 위해 이름을 바꾸기로했습니다. 지금 수정). – SecondMatter
Daniel , 당신의 방식대로, 그리고 훨씬 더 나은 방법으로 그것을 할 수 있습니다. 그건 그렇고, 나는 이전에 p.save()를 들여 쓰지 않았으므로 for 루프에 포함시키지 않았다는 것을 깨달았다. – SecondMatter