我正在使用django的这个应用程序:'Django-ratings',我现在正在使用它几天,但我不能让它工作,我不知道我的代码中有什么问题
我已将'djangoratings'
添加到我的INSTALLED_APPS,然后我将字段rating = RatingField(range=5)
添加到我想要评分的模型中。
这是我的观点
def votos(request, self):
if request.is_ajax():
form = UbicacionForm(request.POST)
if form.is_valid():
u = form.save(commit=False)
u.user = request.user
u.save()
form.save_m2m()
Ubicacion.rating.add(score=self.rating, user=self.user, ip_address=self.ip_address)
data = '<ul>'
for ubicacion.rating in ubicaciones:
data += '<li>%s %s s</li>' % (ubicacion.rating.score, ubicacion.rating.votes)
data += '</ul>'
return HttpResponse(simplejson.dumps({'ok': True, 'msg': data}), mimetype='application/json')
else:
return HttpResponse(simplejson.dumps({'ok':False, 'msg':'No fue valido!'}), mimetype='application/json')
我的模板:
{%load ratings%}
{% csrf_token %}
<td><input name="star" type="radio" class="star" value= "1"/></td>
<td><input name="star" type="radio" class="star" value= "2"/></td>
<td><input name="star" type="radio" class="star" value= "3"/></td>
<td><input name="star" type="radio" class="star" value= "4"/></td>
<td><input name="star" type="radio" class="star" value= "5"/></td>
{% rating_by_request request on ubicaciones.rating as vote %}
{% if vote %}
<td> {{ vote }}</td>
{% else %}
<td> Sorry, no one has voted yet!</td>
{% endif %}`
我的ajax功能:
$(".star").click(function(){
var val = $(this).data("value");
$.ajax({
type: "POST",
url : "votos",
data : {
"val" : val
},
success: function(data) {
console.log(data);
}
});
});
我的模型形式:
class UbicacionForm(ModelForm):
class Meta:
model = Ubicacion
我的网址
url(r'rate/(?P<object_id>\d*)/(?P<score>\d*)/', AddRatingFromModel(), {
'app_label': 'gmaps',
'model': 'ubicacion',
'field_name': 'rating',
}),
此应用应创建的新列,它在我要评级的模型内部创建,“rating_vote”和“rating_score”都在数据库中,但有0值:/
答案 0 :(得分:1)
目前在votos
视图中,您正在使用POST数据填充UbicacionForm
。您要发送一个值val
,这是您要添加的评分。
此模型表单正在寻找创建或加载Ubicacion,但这永远不会有效,因为您只有一个值(我假设它实际上并不是Ubicacion
的一部分)。
此外,您还有第二个未使用的网址rate/(?P<object_id>\d*)/(?P<score>\d*)/
。
将您的ajax请求更改为指向django-ratings url而不是votos
$(".star").click(function(){
var val = $(this).data("value"),
// Get the pk of the ubicacion from somewhere in your page
ubicacion_pk = 1,
// Build the url
url = '/rate/' + ubicacion_pk + '/' + val + '/';
$.ajax({
type: "POST",
url : url,
success: function(data) {
console.log(data);
}
});
});