From 4f3da1a88ba6ed2a4cbbd6918d096a401315ad00 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 24 Aug 2021 10:02:54 +0200 Subject: [PATCH] models: prevent too long error on Origin.slug (#54047) --- .../migrations/0002_auto_20210824_0957.py | 25 +++++++++++++++++++ fargo/fargo/models.py | 14 ++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 fargo/fargo/migrations/0002_auto_20210824_0957.py diff --git a/fargo/fargo/migrations/0002_auto_20210824_0957.py b/fargo/fargo/migrations/0002_auto_20210824_0957.py new file mode 100644 index 0000000..a2a830f --- /dev/null +++ b/fargo/fargo/migrations/0002_auto_20210824_0957.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.19 on 2021-08-24 07:57 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('fargo', '0001_squashed_0017_auto_20180331_1532'), + ] + + operations = [ + migrations.AlterField( + model_name='origin', + name='label', + field=models.TextField(verbose_name='Label'), + ), + migrations.AlterField( + model_name='origin', + name='slug', + field=models.SlugField(max_length=256, verbose_name='Slug'), + ), + ] diff --git a/fargo/fargo/models.py b/fargo/fargo/models.py index a871b17..11f052e 100644 --- a/fargo/fargo/models.py +++ b/fargo/fargo/models.py @@ -16,6 +16,7 @@ # along with this program. If not, see . import base64 +import hashlib import subprocess import os import re @@ -42,14 +43,21 @@ from jsonfield import JSONField from . import utils, managers +def slug_truncate(label, length=256): + slug = slugify(label) + if len(slug) < length: + return slug + return slug[:length - 5] + '-%4s' % hashlib.md5(label.encode()).hexdigest()[:4] + + @python_2_unicode_compatible class Origin(models.Model): - label = models.CharField(_('Label'), max_length=80) - slug = models.SlugField(_('Slug')) + label = models.TextField(_('Label')) + slug = models.SlugField(_('Slug'), max_length=256) def save(self, *args, **kwargs): if not self.slug: - self.slug = slugify(self.label) + self.slug = slug_truncate(self.label) return super(Origin, self).save(*args, **kwargs) def __str__(self): -- 2.32.0.rc0