from datetime import date from django.shortcuts import render, get_object_or_404, redirect from django.views.decorators.http import require_POST from plants.models import Plant, Species, PruningLog from plants.forms import PlantForm, PruningLogForm from plants.utils.pruning import pruning_status def plant_list(request): qs = Plant.objects.select_related('species').all() q = request.GET.get('q', '') indoor_filter = request.GET.get('filter', '') if q: qs = qs.filter(name__icontains=q) | qs.filter(location__icontains=q) if indoor_filter == 'indoor': qs = qs.filter(is_indoor=True) elif indoor_filter == 'outdoor': qs = qs.filter(is_indoor=False) template = ( 'plants/partials/plant_list_results.html' if request.htmx else 'plants/plant_list.html' ) return render(request, template, {'plants': qs, 'q': q, 'filter': indoor_filter}) def plant_detail(request, pk): plant = get_object_or_404( Plant.objects.select_related('species').prefetch_related('pruning_logs'), pk=pk, ) today = date.today() return render(request, 'plants/plant_detail.html', { 'plant': plant, 'pruning_status': pruning_status(plant, today), 'log_form': PruningLogForm(initial={'pruned_on': today}), 'today': today, }) @require_POST def log_pruning(request, pk): plant = get_object_or_404( Plant.objects.prefetch_related('pruning_logs'), pk=pk ) form = PruningLogForm(request.POST) if form.is_valid(): log = form.save(commit=False) log.plant = plant log.save() today = date.today() return render(request, 'plants/partials/pruning_strip.html', { 'plant': plant, 'pruning_status': pruning_status(plant, today), 'log_form': PruningLogForm(initial={'pruned_on': today}), }) def plant_add(request): return render(request, 'plants/species_search.html') def plant_edit(request, pk): pass def plant_delete(request, pk): pass