diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-12 12:54:13 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-12 12:54:13 +0200 |
commit | cf10508b07f73cb26c8d47ce2d916853efb111c0 (patch) | |
tree | c1c525f5e1f7b244688c282f169fac2e326fa4de /ishtar_common/utils.py | |
parent | e182eeb29cf9a7dbd936e88ee0db1b8658a0c5ce (diff) | |
download | Ishtar-cf10508b07f73cb26c8d47ce2d916853efb111c0.tar.bz2 Ishtar-cf10508b07f73cb26c8d47ce2d916853efb111c0.zip |
DocumentTemplate: add slug, manage natural key. Utils: create_slug function
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r-- | ishtar_common/utils.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 19ff16394..9eda2d22f 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -241,3 +241,17 @@ def post_save_point(sender, **kwargs): instance.skip_history_when_saving = True instance.save() return + + +def create_slug(model, name, slug_attr='slug', max_length=100): + base_slug = slugify(name) + slug = base_slug[:max_length] + final_slug = None + idx = 1 + while not final_slug: + if slug and not model.objects.filter(**{slug_attr:slug}).exists(): + final_slug = slug + break + slug = base_slug[:(max_length - 1 - len(str(idx)))] + "-" + str(idx) + idx += 1 + return final_slug |