diff --git a/plants/templates/plants/location_edit.html b/plants/templates/plants/location_edit.html
new file mode 100644
index 0000000..2409ab0
--- /dev/null
+++ b/plants/templates/plants/location_edit.html
@@ -0,0 +1,21 @@
+{% extends "plants/base.html" %}
+{% block title %}Edit Area — BloomBase{% endblock %}
+{% block content %}
+
+
-
All
- {% for loc in locations %}
-
{{ loc.name }}
- {% endfor %}
+
diff --git a/plants/urls.py b/plants/urls.py
index b01fb1e..63808cb 100644
--- a/plants/urls.py
+++ b/plants/urls.py
@@ -1,5 +1,5 @@
from django.urls import path
-from plants.views import dashboard, plants, pruning, species, identify
+from plants.views import dashboard, plants, pruning, species, identify, locations
urlpatterns = [
path('', dashboard.dashboard, name='dashboard'),
@@ -22,6 +22,9 @@ urlpatterns = [
path('photos//set-thumbnail/', plants.set_thumbnail, name='set_thumbnail'),
path('photos//delete/', plants.delete_photo, name='delete_photo'),
path('pruning/', pruning.pruning_calendar, name='pruning_calendar'),
+ path('locations/', locations.location_list, name='location_list'),
+ path('locations//edit/', locations.location_edit, name='location_edit'),
+ path('locations//delete/', locations.location_delete, name='location_delete'),
path('species/search/', species.species_search, name='species_search'),
path('species/select/', species.species_select, name='species_select'),
path('species/select/vpc/', species.vpc_select, name='vpc_select'),
diff --git a/plants/views/locations.py b/plants/views/locations.py
new file mode 100644
index 0000000..e557c37
--- /dev/null
+++ b/plants/views/locations.py
@@ -0,0 +1,34 @@
+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
+
+
+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})
+
+
+def location_edit(request, pk):
+ location = get_object_or_404(Location, pk=pk)
+ if request.method == 'POST':
+ name = request.POST.get('name', '').strip()
+ if name:
+ location.name = name
+ location.save()
+ return redirect('location_list')
+ return render(request, 'plants/location_edit.html', {'location': location})
+
+
+@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')