diff --git a/favicon/migrations/0004_faviconimg_favicon_size_rel_unique.py b/favicon/migrations/0004_faviconimg_favicon_size_rel_unique.py new file mode 100644 index 0000000000000000000000000000000000000000..7fd468e128293d100146c2543444062672c85e37 --- /dev/null +++ b/favicon/migrations/0004_faviconimg_favicon_size_rel_unique.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2 on 2021-05-15 20:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('favicon', '0003_site_manager'), + ] + + operations = [ + migrations.AddConstraint( + model_name='faviconimg', + constraint=models.UniqueConstraint(fields=('faviconFK', 'size', 'rel'), name='favicon_size_rel_unique'), + ), + ] diff --git a/favicon/models.py b/favicon/models.py index dead34bc204c8dada209ae704f830cfa315f30c5..a1e4c7e1b86d8e2af17b071f121d3b9be85b024b 100644 --- a/favicon/models.py +++ b/favicon/models.py @@ -81,7 +81,7 @@ class Favicon(models.Model): # Delete all favicon images to update all if update: favicons.delete() - favicons = FaviconImg.objects.empty() + favicons = FaviconImg.objects.none() found = [] else: favicons = favicons.all() @@ -96,7 +96,7 @@ class Favicon(models.Model): fav.generate_image() new_favicons.append(fav) if new_favicons: - FaviconImg.objects.bulk_create(new_favicons) + FaviconImg.objects.bulk_create(new_favicons, ignore_conflicts=True) return list(favicons) + new_favicons @@ -117,8 +117,6 @@ class Favicon(models.Model): return html def save(self, *args, **kwargs): - update = False - if self.isFavicon: Favicon.on_site.exclude(pk=self.pk).update(isFavicon=False) @@ -127,7 +125,7 @@ class Favicon(models.Model): cache.delete(config_cache_key) if self.faviconImage: - html = self.get_favicons(update=update) + html = self.as_html(update=True) cache.set(config_cache_key, html, timeout=None) @@ -154,6 +152,9 @@ class FaviconImg(models.Model): def del_image(self): self.faviconImage.delete() + class Meta: + constraints = [models.UniqueConstraint(fields=["faviconFK", "size", "rel"], name="favicon_size_rel_unique")] + signals.pre_delete.connect(pre_delete_image, sender=Favicon) signals.pre_delete.connect(pre_delete_image, sender=FaviconImg) diff --git a/favicon/templatetags/favtags.py b/favicon/templatetags/favtags.py index 27cba6952488c2a81e0c78fdda4a4204b009c34e..894ea8d9ba1826b2804e1cecbd19eca730fbb3ae 100644 --- a/favicon/templatetags/favtags.py +++ b/favicon/templatetags/favtags.py @@ -20,12 +20,11 @@ def place_favicon(context): html = cache.get(config_cache_key) if html: - return html + return mark_safe(html) fav = Favicon.on_site.filter(isFavicon=True).first() if not fav: return mark_safe('<!-- no favicon -->') - html = fav.as_html() cache.set(config_cache_key, html, timeout=None)