refactor: Allow image upload for animals

This commit is contained in:
moanos [he/him] 2024-03-20 13:40:00 +01:00
parent 58f45a69cc
commit b0b5b185d6
5 changed files with 43 additions and 15 deletions

View File

@ -1,5 +1,5 @@
from django import forms
from .models import AdoptionNotice, Animal
from .models import AdoptionNotice, Animal, Image
class DateInput(forms.DateInput):
@ -14,6 +14,7 @@ class AdoptionNoticeForm(forms.ModelForm):
'searching_since': DateInput(),
}
class AnimalForm(forms.ModelForm):
class Meta:
model = Animal
@ -22,3 +23,9 @@ class AnimalForm(forms.ModelForm):
widgets = {
'date_of_birth': DateInput(),
}
class ImageForm(forms.ModelForm):
class Meta:
model = Image
fields = ('title', 'image', 'alt_text')

View File

@ -117,6 +117,12 @@ class Animal(models.Model):
"""Returns a human-readable age based on the date of birth."""
return misc.age_as_hr_string(self.age)
@property
def photos_list(self):
""""""
print(self.photos.all())
return self.photos.all()
def get_absolute_url(self):
"""Returns the url to access a detailed page for the animal."""
return reverse('animal-detail', args=[str(self.id)])

View File

@ -1,3 +1,4 @@
{% load static %}
<div class="detail-animal"></div>
<div class="detail-animal-header">
<h1 class="inline">{{ animal.name }}</h1>
@ -16,4 +17,8 @@
</table>
</div>
<p>{{ animal.description }}</p>
<h2>Bilder</h2>
{% for image in animal.photos_list %}
<img src="/media/{{ image.image }}">
{% endfor %}
</div>

View File

@ -3,11 +3,17 @@
{% block content %}
<h1>Vermitteln</h1>
Hier kannst du jetzt einzelne Tiere zu deiner Vermittlung hinzufügen. Lad auch gerne Fotos hoch. Gruppenfotos kannst du im nächsten Schritt hochladen.
Hier kannst du jetzt einzelne Tiere zu deiner Vermittlung hinzufügen. Lad auch gerne Fotos hoch. Gruppenfotos kannst
du im nächsten Schritt hochladen.
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-animal">
{{ form.as_p }}
<input type="file" name="picture">
</div>
<div class="form-image">
<h2>Bild hinzufügen</h2>
{{ image_form.as_p }}
</div>
<button name="button_add_another_animal" type="submit">Speichern und nächstes Tier hinzufügen</button>
<button name="button_save_and_continue" type="submit">Speichern und weiter</button>
</form>

View File

@ -4,7 +4,7 @@ from django.urls import reverse
import markdown
from fellchensammlung.models import AdoptionNotice, MarkdownContent, Animal, Rule, Image
from .forms import AdoptionNoticeForm, AnimalForm
from .forms import AdoptionNoticeForm, AnimalForm, ImageForm
def index(request):
@ -47,26 +47,30 @@ def add_adoption(request):
def add_animal_to_adoption(request, adoption_notice_id):
if request.method == 'POST':
form = AnimalForm(request.POST, request.FILES)
form = AnimalForm(request.POST)
image_form = ImageForm(request.POST, request.FILES)
if form.is_valid():
form.cleaned_data["adoption_notice_id"] = adoption_notice_id
instance = form.save(commit=False)
instance.adoption_notice_id = adoption_notice_id
if 'image' in request.FILES:
image_instance = Image(image=request.FILES['image'])
image_instance.save()
instance.photos.add(image_instance)
instance.save()
if 'image_-image' in request.FILES:
image = Image(image=request.FILES['image_-image'])
image.save()
instance.photos.add(image)
if "button_add_another_animal" in request.POST:
return redirect(reverse("add-animal-to-adoption", args=[str(adoption_notice_id)]))
else:
return redirect(reverse("adoption-notice-detail", args=[str(adoption_notice_id)]))
else:
form = AnimalForm()
return render(request, 'fellchensammlung/form_add_animal_to_adoption.html', {'form': form})
image_form = ImageForm(request.POST, request.FILES, prefix="image_")
return render(request, 'fellchensammlung/form_add_animal_to_adoption.html',
{'form': form, "image_form": image_form})
def about(request):