feat: add delete_card_photo view and URL

This commit is contained in:
Stephan Kerkman 2026-05-28 21:54:37 +02:00
parent cb5dd3dc84
commit 9edad5a715
3 changed files with 31 additions and 0 deletions

View file

@ -266,6 +266,26 @@ class TestUploadCardPhoto:
assert resp.templates[0].name == 'plants/partials/card_gallery.html'
@pytest.mark.django_db
class TestDeleteCardPhoto:
def test_delete_removes_record(self, client):
plant = Plant.objects.create(name='Fern')
photo = PlantCardPhoto.objects.create(plant=plant, image='plants/cards/card.jpg')
resp = client.post(reverse('delete_card_photo', args=[photo.pk]))
assert resp.status_code == 200
assert not PlantCardPhoto.objects.filter(pk=photo.pk).exists()
def test_returns_card_gallery_partial(self, client):
plant = Plant.objects.create(name='Fern')
photo = PlantCardPhoto.objects.create(plant=plant, image='plants/cards/card.jpg')
resp = client.post(reverse('delete_card_photo', args=[photo.pk]))
assert resp.templates[0].name == 'plants/partials/card_gallery.html'
def test_404_for_missing_photo(self, client):
resp = client.post(reverse('delete_card_photo', args=[9999]))
assert resp.status_code == 404
@pytest.mark.django_db
class TestPruningCalendar:
def test_returns_200(self, client):

View file

@ -12,6 +12,7 @@ urlpatterns = [
path('plants/<int:pk>/log-pruning/', plants.log_pruning, name='log_pruning'),
path('plants/<int:pk>/upload-photo/', plants.upload_photo, name='upload_photo'),
path('plants/<int:pk>/card-photos/upload/', plants.upload_card_photo, name='upload_card_photo'),
path('card-photos/<int:card_photo_pk>/delete/', plants.delete_card_photo, name='delete_card_photo'),
path('photos/<int:photo_pk>/set-thumbnail/', plants.set_thumbnail, name='set_thumbnail'),
path('photos/<int:photo_pk>/delete/', plants.delete_photo, name='delete_photo'),
path('pruning/', pruning.pruning_calendar, name='pruning_calendar'),

View file

@ -131,6 +131,16 @@ def upload_card_photo(request, pk):
return render(request, 'plants/partials/card_gallery.html', {'plant': plant})
@require_POST
def delete_card_photo(request, card_photo_pk):
card_photo = get_object_or_404(PlantCardPhoto, pk=card_photo_pk)
plant_pk = card_photo.plant_id
card_photo.image.delete(save=False)
card_photo.delete()
plant = Plant.objects.prefetch_related('card_photos').get(pk=plant_pk)
return render(request, 'plants/partials/card_gallery.html', {'plant': plant})
@require_POST
def upload_photo(request, pk):
plant = get_object_or_404(Plant.objects.prefetch_related('photos'), pk=pk)