from django.db import models from django.dispatch import receiver from django.contrib.auth.models import User from django.utils import timezone from django.core.files.storage import default_storage class PflaenzliUser(User): zipcode = models.PositiveIntegerField(blank=True) class Offer(models.Model): created = models.DateTimeField(default=timezone.now) user = models.ForeignKey(PflaenzliUser, on_delete=models.CASCADE) title = models.CharField(max_length=50) description = models.TextField(max_length=5000) zipcode = models.IntegerField(blank=True, default=0) image = models.ImageField(upload_to="uploads/") class Wish(models.Model): created = models.DateTimeField(default=timezone.now) user = models.ForeignKey(PflaenzliUser, on_delete=models.CASCADE) title = models.CharField(max_length=200) @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)