def tags_starting_with(request):
- prefix = request.GET['q']
+ prefix = request.GET.get('q', '')
# Prefix must have at least 2 characters
if len(prefix) < 2:
return HttpResponse('')
if request.method == 'POST':
form = forms.ObjectSetsForm(book, request.user, request.POST)
if form.is_valid():
- book.tags = ([models.Tag.objects.get(pk=id) for id in form.cleaned_data['set_ids']] +
- list(book.tags.filter(~Q(category='set') | ~Q(user=request.user))))
+ old_shelves = list(book.tags.filter(category='set'))
+ new_shelves = [models.Tag.objects.get(pk=id) for id in form.cleaned_data['set_ids']]
+
+ for shelf in [shelf for shelf in old_shelves if shelf not in new_shelves]:
+ shelf.book_count -= 1
+ shelf.save()
+
+ for shelf in [shelf for shelf in new_shelves if shelf not in old_shelves]:
+ shelf.book_count += 1
+ shelf.save()
+
+ book.tags = new_shelves + list(book.tags.filter(~Q(category='set') | ~Q(user=request.user)))
if request.is_ajax():
return HttpResponse('<p>Półki zostały zapisane.</p>')
else:
models.Tag.objects.remove_tag(book, shelf)
+ shelf.book_count -= 1
+ shelf.save()
+
return HttpResponse('Usunieto')