Gracefully handle list duplicate additions

This commit is contained in:
Mouse Reeve 2021-02-10 13:50:20 -08:00
parent 8842db3c1b
commit b22e56333f

View file

@ -1,6 +1,7 @@
''' book list views''' ''' book list views'''
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.db import IntegrityError
from django.db.models import Count, Q from django.db.models import Count, Q
from django.http import HttpResponseNotFound, HttpResponseBadRequest from django.http import HttpResponseNotFound, HttpResponseBadRequest
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
@ -181,24 +182,28 @@ def add_book(request, list_id):
book = get_object_or_404(models.Edition, id=request.POST.get('book')) book = get_object_or_404(models.Edition, id=request.POST.get('book'))
# do you have permission to add to the list? # do you have permission to add to the list?
if request.user == book_list.user or book_list.curation == 'open': try:
# go ahead and add it if request.user == book_list.user or book_list.curation == 'open':
models.ListItem.objects.create( # go ahead and add it
book=book, models.ListItem.objects.create(
book_list=book_list, book=book,
user=request.user, book_list=book_list,
) user=request.user,
elif book_list.curation == 'curated': )
# make a pending entry elif book_list.curation == 'curated':
models.ListItem.objects.create( # make a pending entry
approved=False, models.ListItem.objects.create(
book=book, approved=False,
book_list=book_list, book=book,
user=request.user, book_list=book_list,
) user=request.user,
else: )
# you can't add to this list, what were you THINKING else:
return HttpResponseBadRequest() # you can't add to this list, what were you THINKING
return HttpResponseBadRequest()
except IntegrityError:
# if the book is already on the list, don't flip out
pass
return redirect('list', list_id) return redirect('list', list_id)