2012-08-24 28 views
1

models.py

class Restaurant(models.Model) 
    food_rating = RatingField(range=2, weight=5,can_change_vote = True,allow_delete = True,allow_anonymous = True) 
    service_rating = RatingField(range=2, weight=5,can_change_vote = True,allow_delete = True,allow_anonymous = True) 
    ambience_ratiing = RatingField(range=2, weight=5,can_change_vote = True,allow_delete = True,allow_anonymous = True) 

view.py代码

r = Restaurant.objects.get(pk=1) 
r.food_rating.add(score = -1 , user = request.user , ip_address =request.META.get('HTTP_REFERER')) 
print r.food_rating.score 

错误

djangoratings.exceptions.InvalidRating: -1 is not a valid choice for food_rating 

疑问

我food_rating场有资格参加两个分数,我该如何c将比分提高,以便我可以实施投票并投票下来功能,在投票上,我应该能够将现有比分加1,然后投票下来,我应该可以减去投票,请提前致谢,请提前致谢Django的评级程序,负得分

+0

Is RatingField是一个自定义字段吗? – Dave

+0

我使用djangoratings应用程序,https://github.com/dcramer/django-ratings – Abhimanyu

回答

1

的问题来自this script

if score < 0 or score > self.field.range: 
    raise InvalidRating("%s is not a valid choice for %s" % (score, self.field.name)) 

简短的回答:转换[-x:Y]你要用于显示间隔,进入[-x + X:Y + X]在代码避免这个问题。如果你想[-5:5],然后使用[-5 + 5:5 + 5],它是[0:10]。如果你想要[-50:100],然后使用[-50 + 50:100 + 50] = [0:150]等等......这是一个简单的公式,对于程序员来说不应该是一个问题;)

长的答案:无论你是否分叉djangoratings,要么打开一个问题,要求添加一个设置,使负面评级......并可能他会拒绝它,因为简单的区间转换解决方法,这里有一些更具体的例子:

class Restaurant(models.Model): 
    # blabla :) 

    ambience_rating = RatingField(range=5, weight=5,can_change_vote = True,allow_delete = True,allow_anonymous = True) 

    def get_adjusted_ambiance_rating(self): 
     return self.ambience_rating - 3 

所以,如果ambience_rating为 “1”(最低分),get_adjusted_ambiance_rating()将返回-2。

如果ambience_rating为 “5”(最高分),get_ambiance_rating_with_negative()将返回2.

适应这个例子/招您的需求。

你或许应该让所有评级一个方法:

def get_adjusted_rating(self, which): 
    return getattr(self, '%s_rating' % which) - 3 

可赎回这样:

restaurant.get_adjusted_rating('ambiance') 
restaurant.get_adjusted_rating('food') 

# etc ... 

也许模板过滤器:

@register.filter 
def get_adjusted_rating(restaurant, which): 
    return restaurant.get_adjusted_rating(which) 

可用作这些:

{{ restaurant|get_adjusted_rating:"ambiance" }} 
{{ restaurant|get_adjusted_rating:"food" }} 

{# etc, etC#} 

更多details about template filters

+0

谢谢,但我想投票下来,用户应该有选项投下来或投反对票 – Abhimanyu

+0

简单,做这样的事情:投票超级down - > 1,vote-down - > 2,vote neutral - > 3,vote up - > 4,vote super up - > 5.在代码中保留1-5范围,但在模板中使用转换后的值...你明白吗 ? – jpic

+0

添加技术细节以解答。 – jpic