feat: Add basic image upload (WIP)

This commit is contained in:
moanos [he/him] 2024-03-20 11:38:30 +01:00
parent 68e6d3e299
commit 240ced0374
7 changed files with 33 additions and 5 deletions

View File

@ -2,7 +2,7 @@ from django.contrib import admin
from django.contrib import admin
from .models import Animal, Species, RescueOrganization, AdoptionNotice, Location, Rule
from .models import Animal, Species, RescueOrganization, AdoptionNotice, Location, Rule, Image
admin.site.register(Animal)
admin.site.register(Species)
@ -10,3 +10,4 @@ admin.site.register(RescueOrganization)
admin.site.register(Location)
admin.site.register(AdoptionNotice)
admin.site.register(Rule)
admin.site.register(Image)

View File

@ -17,7 +17,8 @@ class AdoptionNoticeForm(forms.ModelForm):
class AnimalForm(forms.ModelForm):
class Meta:
model = Animal
fields = ['name', "species", "sex", "date_of_birth", "description", "photos"]
picture = forms.ImageField(label='Image', required=False)
fields = ['name', "species", "sex", "date_of_birth", "description"]
widgets = {
'date_of_birth': DateInput(),
}

View File

@ -0,0 +1,17 @@
# Generated by Django 5.0.3 on 2024-03-20 10:35
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('fellchensammlung', '0002_rule'),
]
operations = [
migrations.RemoveField(
model_name='image',
name='uploaded_by',
),
]

View File

@ -11,7 +11,6 @@ class Image(models.Model):
title = models.CharField(max_length=200)
image = models.ImageField(upload_to='images')
alt_text = models.TextField(max_length=2000)
uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title

View File

@ -7,6 +7,7 @@
<form method = "post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="file" name="picture">
<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

@ -3,7 +3,7 @@ from django.http import HttpResponse
from django.urls import reverse
import markdown
from fellchensammlung.models import AdoptionNotice, MarkdownContent, Animal, Rule
from fellchensammlung.models import AdoptionNotice, MarkdownContent, Animal, Rule, Image
from .forms import AdoptionNoticeForm, AnimalForm
@ -53,6 +53,12 @@ def add_animal_to_adoption(request, adoption_notice_id):
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 "button_add_another_animal" in request.POST:
return redirect(reverse("add-animal-to-adoption", args=[str(adoption_notice_id)]))

View File

@ -105,6 +105,9 @@ print(f"Allowed hosts: {ALLOWED_HOSTS}")
# This is adjusted based on this guide https://testdriven.io/blog/django-docker-traefik/
# compression and caching support (see https://whitenoise.readthedocs.io/en/latest/#quickstart-for-django-apps)
STORAGES = {
"default": {
"BACKEND": "django.core.files.storage.FileSystemStorage",
},
"staticfiles": {
"BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
},