bloombase/plants/views/locations.py

53 lines
1.7 KiB
Python

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')