from django.shortcuts import render, get_object_or_404, redirect from django.views.decorators.http import require_POST from django.db.models import Count from plants.models import Location, Plant from plants.forms import LocationForm def location_list(request): if request.method == 'POST': name = request.POST.get('name', '').strip() if name: Location.objects.get_or_create(name=name) return redirect('location_list') locations = Location.objects.annotate(plant_count=Count('plants')) return render(request, 'plants/locations.html', { 'locations': locations, 'active_tab': 'garden', }) def location_detail(request, pk): location = get_object_or_404(Location, pk=pk) plants = location.plants.select_related('species').prefetch_related('photos').all() return render(request, 'plants/location_detail.html', { 'location': location, 'plants': plants, 'active_tab': 'garden', }) def location_edit(request, pk): location = get_object_or_404(Location, pk=pk) if request.method == 'POST': form = LocationForm(request.POST, request.FILES, instance=location) if form.is_valid(): form.save() return redirect('location_list') else: form = LocationForm(instance=location) return render(request, 'plants/location_edit.html', { 'location': location, 'form': form, 'active_tab': 'garden', }) @require_POST def location_delete(request, pk): location = get_object_or_404(Location, pk=pk) Plant.objects.filter(location=location).update(location=None) location.delete() return redirect('location_list')