Add signal handler to enforce unique template names for sites

This commit is contained in:
blag 2025-05-25 22:33:24 -06:00
parent 05f1ee1193
commit 43a038ec2d
No known key found for this signature in database

View file

@ -0,0 +1,25 @@
from django.contrib.sites.models import Site
from django.db.models import Subquery
from django.db.utils import IntegrityError
from .models import Template
def verify_template_name_uniqueness_across_all_selected_sites(sender, **kwargs):
if kwargs.get('action', None) == 'pre_add':
if kwargs.get('reverse'):
site = kwargs.get('instance', None)
template_ids = kwargs.get('pk_set', None)
template_names = Template.objects.filter(id__in=template_ids).values_list('name')
if template := site.template_set.filter(name__in=Subquery(template_names.values_list('name'))).first():
raise IntegrityError(
f"Template with name '{template.name}' already exists for site '{site.name}'"
)
else:
template = kwargs.get('instance', None)
site_ids = kwargs.get('pk_set', None)
if site := Site.objects.filter(id__in=site_ids, template__name=template.name).first():
raise IntegrityError(
f"Template with name '{template.name}' already exists for site '{site.name}'"
)