我不能让Django评级工作

时间:2014-04-11 04:28:21

标签: javascript python ajax django django-ratings

我正在使用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值:/

1 个答案:

答案 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);
        }
    });
});