django评分应用程序,负面评分



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字段有资格获得两个分数,我应该如何更改分数,以便实现向上投票和向下投票功能,在向上投票时,我应该能够在现有分数上加1,在向下投票时我应该能够减去一个投票,请帮忙,提前感谢

问题来自这个脚本:

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],依此类推。。。这是一个简单的公式,对程序员来说应该不是问题;)

长话短说:要么你分叉djangoraratings,要么你打开一个问题,要求添加一个启用负面评级的设置。。。他可能会拒绝它,因为有一个简单的区间转换方法,这里有一些更具体的例子:

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

因此,如果ambient_rating为"1"(最低分数),则get_adjusted_ambiance_rating()将返回-2。

如果ambient_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 #}

有关模板筛选器的更多详细信息。

相关内容

  • 没有找到相关文章

最新更新