p
This commit is contained in:
+29
-6
@@ -1,6 +1,7 @@
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.http import HttpResponse, HttpResponseBadRequest
|
||||
from django.template.loader import render_to_string
|
||||
import os
|
||||
from .models import Dinosaur, BackgroundImage
|
||||
from .forms import DinosaurBulkFormSet
|
||||
from .forms import DinosaurForm
|
||||
@@ -26,7 +27,16 @@ def card_create(request):
|
||||
if request.method == 'POST':
|
||||
form = DinosaurForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
card = form.save()
|
||||
# Save instance with commit=False so we can set a default name
|
||||
# from the uploaded image filename when the name is empty.
|
||||
card = form.save(commit=False)
|
||||
if not card.name:
|
||||
image_file = form.cleaned_data.get('image')
|
||||
if image_file and getattr(image_file, 'name', None):
|
||||
base = os.path.splitext(image_file.name)[0]
|
||||
# replace separators and title-case for a nicer default
|
||||
card.name = base.replace('_', ' ').replace('-', ' ').strip().title()
|
||||
card.save()
|
||||
if is_htmx(request):
|
||||
card_html = render_to_string('cards/_card_item.html', {'card': card, 'background': background}, request=request)
|
||||
# Also return an out-of-band fragment to replace/clear the form container
|
||||
@@ -53,7 +63,15 @@ def card_edit(request, pk):
|
||||
if request.method == 'POST':
|
||||
form = DinosaurForm(request.POST, request.FILES, instance=card)
|
||||
if form.is_valid():
|
||||
card = form.save()
|
||||
# Save with commit=False to allow setting a default name from an
|
||||
# uploaded image if the instance has no name.
|
||||
card = form.save(commit=False)
|
||||
if not card.name:
|
||||
image_file = form.cleaned_data.get('image')
|
||||
if image_file and getattr(image_file, 'name', None):
|
||||
base = os.path.splitext(image_file.name)[0]
|
||||
card.name = base.replace('_', ' ').replace('-', ' ').strip().title()
|
||||
card.save()
|
||||
if is_htmx(request):
|
||||
card_html = render_to_string('cards/_card_item.html', {'card': card, 'background': background}, request=request)
|
||||
# Clear the form container via OOB so the edit form disappears after successful save
|
||||
@@ -150,17 +168,22 @@ def cards_overview(request):
|
||||
"""Overview page showing all cards in a table for quick edits."""
|
||||
backgrounds = BackgroundImage.objects.all()
|
||||
qs = Dinosaur.objects.order_by('name')
|
||||
formset = None
|
||||
return render(request, 'cards/bulk_edit.html', {'cards': qs, 'backgrounds': backgrounds})
|
||||
# Use a modelformset so the template renders the management form
|
||||
formset = DinosaurBulkFormSet(queryset=qs)
|
||||
return render(request, 'cards/bulk_edit.html', {'formset': formset, 'backgrounds': backgrounds})
|
||||
|
||||
|
||||
def cards_bulk_update(request):
|
||||
"""Handle POST from the bulk edit formset and save changes."""
|
||||
if request.method != 'POST':
|
||||
return HttpResponseBadRequest('Only POST allowed')
|
||||
# If someone visits the bulk-update URL with GET, redirect them back
|
||||
# to the overview page instead of returning a 400 Bad Request.
|
||||
return redirect('cards:overview')
|
||||
formset = None
|
||||
qs = Dinosaur.objects.order_by('name')
|
||||
try:
|
||||
formset = DinosaurBulkFormSet(request.POST)
|
||||
# Pass the same queryset so management/initial forms align with the rendered formset
|
||||
formset = DinosaurBulkFormSet(request.POST, queryset=qs)
|
||||
except Exception:
|
||||
return HttpResponseBadRequest('Invalid submission')
|
||||
if formset.is_valid():
|
||||
|
||||
Reference in New Issue
Block a user