pflaenz.li/pflaenzli/pflaenzli/models.py
Jannis Portmann b9fa20e4d6
All checks were successful
continuous-integration/drone/push Build is passing
Overhaul PLZ
2023-10-15 00:29:21 +02:00

72 lines
2.5 KiB
Python

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'))
language_code = models.CharField(max_length=2, default='de')
class Plz(models.Model):
plz = models.IntegerField(verbose_name='PLZ')
lat = models.DecimalField(max_digits=8, decimal_places=6)
lon = models.DecimalField(max_digits=8, decimal_places=6)
name = models.CharField(max_length=27)
class Offer(models.Model):
CATEGORIES = [
('PLNT', _('Plant')),
('SEED', _('Seedling')),
('POT', _('Pots')),
('TOOL', _('Tools')),
('OTHR', _('Other')),
]
FILTER_CATEGORIES = [
('ALL', _('All')),
] + CATEGORIES
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'))
category = models.CharField(choices=CATEGORIES, max_length=4, default='PLNT', verbose_name=_('Category'))
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):
if instance.pk:
try:
old_image = sender.objects.get(pk=instance.pk).image
except sender.DoesNotExist:
return False
new_image = instance.image
if old_image != new_image:
default_storage.delete(old_image.path)