from django.contrib.auth.decorators import login_required from django.shortcuts import render, get_object_or_404, redirect from .models import Item from .forms import ItemForm SORT_MAP = { 'fav': ['-favorite', 'name'], 'az': ['name'], 'za': ['-name'], 'newest': ['-created_at'], 'oldest': ['created_at'], 'progress': ['-progress_percent'], } @login_required def item_list(request): category = request.GET.get('category', '') sort = request.GET.get('sort', 'fav') items = Item.objects.all() if category: items = items.filter(category=category) items = items.order_by(*SORT_MAP.get(sort, SORT_MAP['fav'])) return render(request, 'backlogger/list.html', { 'items': items, 'category': category, 'sort': sort, 'categories': Item.CATEGORY_CHOICES, }) @login_required def item_add(request): if request.method == 'POST': form = ItemForm(request.POST) if form.is_valid(): form.save() return redirect('backlogger:list') else: form = ItemForm() return render(request, 'backlogger/item_form.html', {'form': form, 'action': 'Add'}) @login_required def item_edit(request, pk): item = get_object_or_404(Item, pk=pk) if request.method == 'POST': form = ItemForm(request.POST, instance=item) if form.is_valid(): form.save() return redirect('backlogger:list') else: form = ItemForm(instance=item) return render(request, 'backlogger/item_form.html', {'form': form, 'action': 'Edit', 'item': item}) @login_required def item_delete(request, pk): if request.method == 'POST': get_object_or_404(Item, pk=pk).delete() return redirect('backlogger:list')