53 lines
1.7 KiB
Python
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')
|