image library migration step 1
This commit is contained in:
parent
07bea333bc
commit
1a2bbb1c35
23 changed files with 413 additions and 57 deletions
|
@ -7,9 +7,10 @@ from django.utils import timezone
|
|||
from .base import validate_image_size
|
||||
from .services import Service
|
||||
from .providers import CloudProvider, ConsultingPartner
|
||||
from .images import ImageReference
|
||||
|
||||
|
||||
class Article(models.Model):
|
||||
class Article(ImageReference):
|
||||
title = models.CharField(max_length=200)
|
||||
slug = models.SlugField(max_length=250, unique=True)
|
||||
excerpt = models.TextField(
|
||||
|
@ -19,9 +20,12 @@ class Article(models.Model):
|
|||
meta_keywords = models.CharField(
|
||||
max_length=255, blank=True, help_text="SEO keywords separated by commas"
|
||||
)
|
||||
# Original image field - keep temporarily for migration
|
||||
image = models.ImageField(
|
||||
upload_to="article_images/",
|
||||
help_text="Title picture for the article",
|
||||
null=True,
|
||||
blank=True,
|
||||
)
|
||||
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="articles")
|
||||
article_date = models.DateField(
|
||||
|
@ -86,6 +90,13 @@ class Article(models.Model):
|
|||
def get_absolute_url(self):
|
||||
return reverse("services:article_detail", kwargs={"slug": self.slug})
|
||||
|
||||
@property
|
||||
def get_image(self):
|
||||
"""Returns the image from library or falls back to legacy image"""
|
||||
if self.image_library and self.image_library.image:
|
||||
return self.image_library.image
|
||||
return self.image
|
||||
|
||||
@property
|
||||
def related_to(self):
|
||||
"""Returns a string describing what this article is related to"""
|
||||
|
|
|
@ -182,12 +182,13 @@ class ImageReference(models.Model):
|
|||
This helps track usage and provides a consistent interface.
|
||||
"""
|
||||
|
||||
image = models.ForeignKey(
|
||||
image_library = models.ForeignKey(
|
||||
ImageLibrary,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text="Select an image from the library",
|
||||
related_name="%(class)s_references",
|
||||
)
|
||||
|
||||
class Meta:
|
||||
|
@ -202,23 +203,23 @@ class ImageReference(models.Model):
|
|||
if self.pk:
|
||||
try:
|
||||
old_instance = self.__class__.objects.get(pk=self.pk)
|
||||
old_image = old_instance.image
|
||||
old_image = old_instance.image_library
|
||||
except self.__class__.DoesNotExist:
|
||||
pass
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
# Update usage counts
|
||||
if old_image and old_image != self.image:
|
||||
if old_image and old_image != self.image_library:
|
||||
old_image.decrement_usage()
|
||||
|
||||
if self.image and self.image != old_image:
|
||||
self.image.increment_usage()
|
||||
if self.image_library and self.image_library != old_image:
|
||||
self.image_library.increment_usage()
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
"""
|
||||
Override delete to update usage count.
|
||||
"""
|
||||
if self.image:
|
||||
self.image.decrement_usage()
|
||||
if self.image_library:
|
||||
self.image_library.decrement_usage()
|
||||
super().delete(*args, **kwargs)
|
||||
|
|
|
@ -4,9 +4,10 @@ from django.utils.text import slugify
|
|||
from django_prose_editor.fields import ProseEditorField
|
||||
|
||||
from .base import validate_image_size
|
||||
from .images import ImageReference
|
||||
|
||||
|
||||
class CloudProvider(models.Model):
|
||||
class CloudProvider(ImageReference):
|
||||
name = models.CharField(max_length=100)
|
||||
slug = models.SlugField(unique=True)
|
||||
description = ProseEditorField()
|
||||
|
@ -15,6 +16,7 @@ class CloudProvider(models.Model):
|
|||
phone = models.CharField(max_length=25, blank=True, null=True)
|
||||
email = models.EmailField(max_length=254, blank=True, null=True)
|
||||
address = models.TextField(max_length=250, blank=True, null=True)
|
||||
# Original logo field - keep temporarily for migration
|
||||
logo = models.ImageField(
|
||||
upload_to="cloud_provider_logos/",
|
||||
validators=[validate_image_size],
|
||||
|
@ -39,11 +41,19 @@ class CloudProvider(models.Model):
|
|||
def get_absolute_url(self):
|
||||
return reverse("services:provider_detail", kwargs={"slug": self.slug})
|
||||
|
||||
@property
|
||||
def get_logo(self):
|
||||
"""Returns the logo from library or falls back to legacy logo"""
|
||||
if self.image_library and self.image_library.image:
|
||||
return self.image_library.image
|
||||
return self.logo
|
||||
|
||||
class ConsultingPartner(models.Model):
|
||||
|
||||
class ConsultingPartner(ImageReference):
|
||||
name = models.CharField(max_length=200)
|
||||
slug = models.SlugField(unique=True)
|
||||
description = ProseEditorField()
|
||||
# Original logo field - keep temporarily for migration
|
||||
logo = models.ImageField(
|
||||
upload_to="partner_logos/",
|
||||
validators=[validate_image_size],
|
||||
|
@ -83,3 +93,10 @@ class ConsultingPartner(models.Model):
|
|||
|
||||
def get_absolute_url(self):
|
||||
return reverse("services:partner_detail", kwargs={"slug": self.slug})
|
||||
|
||||
@property
|
||||
def get_logo(self):
|
||||
"""Returns the logo from library or falls back to legacy logo"""
|
||||
if self.image_library and self.image_library.image:
|
||||
return self.image_library.image
|
||||
return self.logo
|
||||
|
|
|
@ -13,13 +13,15 @@ from .base import (
|
|||
Currency,
|
||||
)
|
||||
from .providers import CloudProvider
|
||||
from .images import ImageReference
|
||||
|
||||
|
||||
class Service(models.Model):
|
||||
class Service(ImageReference):
|
||||
name = models.CharField(max_length=200)
|
||||
slug = models.SlugField(max_length=250, unique=True)
|
||||
description = ProseEditorField()
|
||||
tagline = models.TextField(max_length=500, blank=True, null=True)
|
||||
# Original logo field - keep temporarily for migration
|
||||
logo = models.ImageField(
|
||||
upload_to="service_logos/",
|
||||
validators=[validate_image_size],
|
||||
|
@ -58,6 +60,13 @@ class Service(models.Model):
|
|||
def get_absolute_url(self):
|
||||
return reverse("services:service_detail", kwargs={"slug": self.slug})
|
||||
|
||||
@property
|
||||
def get_logo(self):
|
||||
"""Returns the logo from library or falls back to legacy logo"""
|
||||
if self.image_library and self.image_library.image:
|
||||
return self.image_library.image
|
||||
return self.logo
|
||||
|
||||
|
||||
class ServiceOffering(models.Model):
|
||||
service = models.ForeignKey(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue