From bd8924224eaec3d8fd9308ebd5e9f75e4bbfd36f Mon Sep 17 00:00:00 2001 From: Swen Kooij Date: Sat, 13 Mar 2021 13:24:36 +0200 Subject: [PATCH] Add flag to disable LocalizedUniqueSlugField --- localized_fields/fields/uniqueslug_field.py | 4 ++++ tests/test_slug_fields.py | 23 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/localized_fields/fields/uniqueslug_field.py b/localized_fields/fields/uniqueslug_field.py index e87c6e2..4e686de 100644 --- a/localized_fields/fields/uniqueslug_field.py +++ b/localized_fields/fields/uniqueslug_field.py @@ -32,6 +32,7 @@ class LocalizedUniqueSlugField(LocalizedAutoSlugField): kwargs["uniqueness"] = kwargs.pop("uniqueness", get_language_codes()) + self.enabled = kwargs.pop("enabled", True) self.immutable = kwargs.pop("immutable", False) super(LocalizedUniqueSlugField, self).__init__(*args, **kwargs) @@ -69,6 +70,9 @@ class LocalizedUniqueSlugField(LocalizedAutoSlugField): The localized slug that was generated. """ + if not self.enabled: + return getattr(instance, self.name) + if not isinstance(instance, AtomicSlugRetryMixin): raise ImproperlyConfigured( ( diff --git a/tests/test_slug_fields.py b/tests/test_slug_fields.py index 936ffe3..87f894f 100644 --- a/tests/test_slug_fields.py +++ b/tests/test_slug_fields.py @@ -1,5 +1,7 @@ import copy +import pytest + from django import forms from django.conf import settings from django.db import models @@ -215,6 +217,27 @@ class LocalizedSlugFieldTestCase(TestCase): for lang_code, lang_name in settings.LANGUAGES: assert obj.slug.get(lang_code) == "title-%s" % lang_name.lower() + @classmethod + def test_disable(cls): + """Tests whether disabling auto-slugging works.""" + + Model = get_fake_model( + { + "title": LocalizedField(), + "slug": LocalizedUniqueSlugField( + populate_from="title", enabled=False + ), + } + ) + + obj = Model() + obj.title = "test" + + # should raise IntegrityError because auto-slugging + # is disabled and the slug field is NULL + with pytest.raises(IntegrityError): + obj.save() + @classmethod def test_allows_override_when_immutable(cls): """Tests whether setting a value manually works and does not get