在我的 django 项目中,我在模板中显示了书籍列表。Book型号有position我用来对书籍进行排序的字段。
我试图通过拖放列表项对该列表进行排序,但我的下一个代码不能很好地工作。我用jQuery 用户界面。它在前端工作,但当用户拖放列表项时不会更改位置字段的值。有人可以帮助我改进我的js并查看代码吗?我很困惑。我将不胜感激任何帮助。
模型.py:
class Book(models.Model):
title = models.CharField(max_length=200, help_text='Заголовок', blank=False)
position = models.IntegerField(help_text='Поле для сортировки', default=0, blank=True)
class Meta:
ordering = ['position', 'pk']
html:
<div id="books" class="list-group">
{% for book in books %}
<div class="panel panel-default list-group-item ui-state-default">
<div class="panel-body">{{ book.title }}</div>
</div>
{% endfor %}
</div>
urls.py:
url(r'^book/(?P<pk>\d+)/sorting/$',
BookSortingView.as_view(),
name='book_sorting')
JS:
$("#books").sortable({
update: function(event, ui) {
var information = $('#books').sortable('serialize');
$.ajax({
url: "???",
type: "post",
data: information
});
},
}).disableSelection();
视图.py:
class BookSortingView(View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(BookSortingView, self).dispatch(request, *args, **kwargs)
def post(self, request, pk, *args, **kwargs):
for index, pk in enumerate(request.POST.getlist('book[]')):
book = get_object_or_404(Book, pk=pk)
book.position = index
book.save()
return HttpResponse()