feat: Add form to add images to adoption notices and animals

This commit is contained in:
moanos [he/him] 2024-05-31 10:56:43 +02:00
parent a364287a38
commit f1dc3fde4c
5 changed files with 69 additions and 1 deletions

View File

@ -72,11 +72,20 @@ class AnimalForm(forms.ModelForm):
class ImageForm(forms.ModelForm): class ImageForm(forms.ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
if 'in_flow' in kwargs:
in_flow = kwargs.pop('in_flow')
else:
in_flow = False
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.helper = FormHelper() self.helper = FormHelper()
self.helper.form_id = 'form-animal-photo' self.helper.form_id = 'form-animal-photo'
self.helper.form_class = 'card' self.helper.form_class = 'card'
self.helper.form_method = 'post' self.helper.form_method = 'post'
if in_flow:
self.helper.add_input(Submit('save-and-add-another', _('Speichern und weiteres Foto hinzufügen')))
self.helper.add_input(Submit('submit', _('Speichern')))
else:
self.helper.add_input(Submit('submit', _('Submit')))
class Meta: class Meta:
model = Image model = Image

View File

@ -0,0 +1,17 @@
{% extends "fellchensammlung/base_generic.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block content %}
<p>
{% blocktranslate %}
Lade hier ein Foto hoch - wähle den Titel wie du willst und mach bitte eine Bildbeschreibung,
damit die Fotos auch für blinde und sehbehinderte Personen zugänglich sind.
{% endblocktranslate %}
<p><a class="btn" href="https://www.dbsv.org/bildbeschreibung-4-regeln.html">{% translate 'Anleitung für Bildbeschreibungen' %}</a></p>
</p>
<div class="container-form">
{% crispy form %}
</div>
{% endblock %}

View File

@ -9,7 +9,7 @@
Bitte mach dich zunächst mit unseren Regeln vertraut. Dann trage hier die ersten Informationen ein. Bitte mach dich zunächst mit unseren Regeln vertraut. Dann trage hier die ersten Informationen ein.
Du bekommst in einem weiteren Schritt die Möglichkeit einzelne Tiere zu deiner Vermittlung hinzuzufügen und Du bekommst in einem weiteren Schritt die Möglichkeit einzelne Tiere zu deiner Vermittlung hinzuzufügen und
Fotos hochzuladen. Fotos hochzuladen.
</p>
{% endblocktranslate %} {% endblocktranslate %}
</p>
{% crispy form %} {% crispy form %}
{% endblock %} {% endblock %}

View File

@ -13,10 +13,14 @@ urlpatterns = [
path("tier/<int:animal_id>/", views.animal_detail, name="animal-detail"), path("tier/<int:animal_id>/", views.animal_detail, name="animal-detail"),
# ex: /animal/5/edit # ex: /animal/5/edit
path("tier/<int:animal_id>/edit", views.animal_edit, name="animal-edit"), path("tier/<int:animal_id>/edit", views.animal_edit, name="animal-edit"),
# ex: /animal/5/add-photo
path("tier/<int:animal_id>/add-photo", views.add_photo_to_animal, name="animal-add-photo"),
# ex: /adoption_notice/7/ # ex: /adoption_notice/7/
path("vermittlung/<int:adoption_notice_id>/", views.adoption_notice_detail, name="adoption-notice-detail"), path("vermittlung/<int:adoption_notice_id>/", views.adoption_notice_detail, name="adoption-notice-detail"),
# ex: /adoption_notice/7/edit # ex: /adoption_notice/7/edit
path("vermittlung/<int:adoption_notice_id>/edit", views.adoption_notice_edit, name="adoption-notice-edit"), path("vermittlung/<int:adoption_notice_id>/edit", views.adoption_notice_edit, name="adoption-notice-edit"),
# ex: /vermittlung/5/add-photo
path("vermittlung/<int:adoption_notice_id>/add-photo", views.add_photo_to_adoption_notice, name="adoption-notice-add-photo"),
# ex: /adoption_notice/2/add-animal # ex: /adoption_notice/2/add-animal
path("vermittlung/<int:adoption_notice_id>/add-animal", views.adoption_notice_add_animal, name="adoption-notice-add-animal"), path("vermittlung/<int:adoption_notice_id>/add-animal", views.adoption_notice_add_animal, name="adoption-notice-add-animal"),

View File

@ -125,6 +125,44 @@ def adoption_notice_add_animal(request, adoption_notice_id):
return render(request, 'fellchensammlung/forms/form_add_animal_to_adoption.html', {'form': form}) return render(request, 'fellchensammlung/forms/form_add_animal_to_adoption.html', {'form': form})
@login_required
def add_photo_to_animal(request, animal_id):
animal = Animal.objects.get(id=animal_id)
if request.method == 'POST':
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
instance = form.save()
animal.photos.add(instance)
if "save-and-add-another" in request.POST:
form = ImageForm(in_flow=True)
return render(request, 'fellchensammlung/forms/form-image.html', {'form': form})
else:
return redirect(reverse("animal-detail", args=[animal_id]))
else:
form = ImageForm(in_flow=True)
return render(request, 'fellchensammlung/forms/form-image.html', {'form': form})
@login_required
def add_photo_to_adoption_notice(request, adoption_notice_id):
adoption_notice = AdoptionNotice.objects.get(id=adoption_notice_id)
if request.method == 'POST':
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
instance = form.save()
adoption_notice.photos.add(instance)
if "save-and-add-another" in request.POST:
form = ImageForm(in_flow=True)
return render(request, 'fellchensammlung/forms/form-image.html', {'form': form})
else:
return redirect(reverse("adoption-notice-detail", args=[adoption_notice_id]))
else:
form = ImageForm(in_flow=True)
return render(request, 'fellchensammlung/forms/form-image.html', {'form': form})
@login_required @login_required
def animal_edit(request, animal_id): def animal_edit(request, animal_id):
""" """