Работаю над этим недавно, поэтому подумал, что смогу найти решение для микса.Во-первых, я использую RateIt, который, как мне показалось, очень прост в настройке и довольно интуитивно понятен (добавьте файлы RateIt *.js
и .*css
в шаблон base.html
):
http://www.radioactivethinking.com/rateit/example/example.htm
Вот ключевые элементы моего решения:
urls.py
url(r'^object/rate/$', RateMyObjectView.as_view(), name='rate_my_object_view'),
my_template.html
<div class="rateit" data-rateit-resetable="false">Rate it!</div>
ajax.js
$('.rateit').bind('click', function(e) {
e.preventDefault();
var ri = $(this);
var value = ri.rateit('value');
var object_id = ri.data('object_id');
$.ajax({
url: '/object/rate/?xhr',
data: {
object_id: object_id,
value: value
},
type: 'post',
success: function(data, response) {
console.log("ajax call succeeded!");
},
error: function(data, response) {
console.log("ajax call failed!");
}
});
});
Некоторые биты представления получены от Джеймса Беннетта (например, настройка xhr
):
http://www.b -list.org / weblog / 2006 / jul / 31 / django-tips-simple-ajax-example-part-1 /
просмотров.py
from django.views.generic.base import View
from .models import MyObject
class RateMyObjectView(View):
def post(self, request):
my_object = MyObject.objects.all().last()
xhr = 'xhr' in request.GET
star_value = request.POST.get('value', '')
my_object.score = star_value
my_object.save()
response_data = {
'message': 'value of star rating:',
'value': star_value
}
if xhr and star_value:
response_data.update({'success': True})
else:
response_data.update({'success': False})
if xhr:
return HttpResponse(json.dumps(response_data), content_type="application/json")
return render_to_response(self.template_name, response_data)
models.py
from django.db import models
class MyObject(models.Model)
score = models.FloatField(max_length=1, default=0)
Имейте в виду, что это наивное решение, и оно просто заменяет текущую звездную оценку впоследний элемент в вашем списке объектов.Это не идеально, так как было бы лучше хранить результаты в виде собственной модели и ссылки на объект.Это было, вы можете хранить их и делать вычисления, как в среднем и т. Д. Я работаю над этим сейчас и обновлю этот ответ, когда я закончу.