import os from django.db import models from django.dispatch import receiver from django.contrib.auth.models import AbstractUser from django.utils import timezone from django.core.files.storage import default_storage from django.utils.translation import gettext_lazy as _ class PflaenzliUser(AbstractUser): email = models.EmailField(max_length=254) zipcode = models.PositiveIntegerField(blank=True, null=True, verbose_name=_('ZIP Code')) class Offer(models.Model): created = models.DateTimeField(default=timezone.now) user = models.ForeignKey(PflaenzliUser, on_delete=models.CASCADE) title = models.CharField(max_length=50, verbose_name=_('Title')) description = models.TextField(max_length=5000, verbose_name=_('Description')) zipcode = models.IntegerField(blank=True, default=0, verbose_name=_('ZIP Code')) image = models.ImageField(upload_to="uploads/", verbose_name=_('Image')) class Wish(models.Model): created = models.DateTimeField(default=timezone.now) user = models.ForeignKey(PflaenzliUser, on_delete=models.CASCADE) title = models.CharField(max_length=200, verbose_name=_('Title')) @receiver(models.signals.post_delete, sender=Offer) def auto_delete_image_on_delete(sender, instance, **kwargs): """ Deletes image from filesystem when corresponding `Offer` object is deleted. """ if instance.image and os.path.isfile(instance.image.path): default_storage.delete(instance.image.path) @receiver(models.signals.pre_save, sender=Offer) def delete_old_image(sender, instance, **kwargs): try: old_image = sender.objects.get(pk=instance.pk).image except sender.DoesNotExist: return False default_storage.delete(old_image.path)