Development #54047
slug trop long -> value too long for type character varying(50)
Début:
18 mai 2021
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
Il est fait :
class Origin(models.Model): label = models.CharField(_('Label'), max_length=80) slug = models.SlugField(_('Slug')) def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.label) return super(Origin, self).save(*args, **kwargs)
implicitement le SlugField a une longueur max de 50 caractères, on peut donc se trouver à en générer un trop long.
https://sentry.entrouvert.org/entrouvert/sictiam/issues/41999/
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 2 ans
La référence sentry mentionnée n'existe plus mais https://sentry.entrouvert.org/entrouvert/sictiam/issues/49399/ est la même.
Internal Server Error: /api/documents/push/ Traceback (most recent call last): File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 538, in get_or_create return self.get(**kwargs), False File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 408, in get self.model._meta.object_name fargo.fargo.models.Origin.DoesNotExist: Origin matching query does not exist. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) psycopg2.DataError: value too long for type character varying(50) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python3/dist-packages/django/views/decorators/csrf.py", line 54, in wrapped_view return view_func(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/views/generic/base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "/usr/lib/python3/dist-packages/rest_framework/views.py", line 495, in dispatch response = self.handle_exception(exc) File "/usr/lib/python3/dist-packages/fargo/fargo/api_views.py", line 79, in handle_exception return super(CommonAPIMixin, self).handle_exception(exc) File "/usr/lib/python3/dist-packages/rest_framework/views.py", line 455, in handle_exception self.raise_uncaught_exception(exc) File "/usr/lib/python3/dist-packages/rest_framework/views.py", line 492, in dispatch response = handler(request, *args, **kwargs) File "/usr/lib/python3/dist-packages/fargo/fargo/api_views.py", line 122, in post slug=slugify(data.get('origin')), defaults={'label': data.get('origin')} File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 82, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 541, in get_or_create return self._create_object_from_params(kwargs, params) File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 575, in _create_object_from_params obj = self.create(**params) File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 422, in create obj.save(force_insert=True, using=self.db) File "/usr/lib/python3/dist-packages/fargo/fargo/models.py", line 53, in save return super(Origin, self).save(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 744, in save force_update=force_update, update_fields=update_fields) File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 782, in save_base force_update, using, update_fields, File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 873, in _save_table result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 911, in _do_insert using=using, raw=raw) File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 82, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 1186, in _insert return query.get_compiler(using=using).execute_sql(return_id) File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py", line 1377, in execute_sql cursor.execute(sql, params) File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 99, in execute return super().execute(sql, params) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/__init__.py", line 434, in execute return real_execute(self, sql, params) File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 67, in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers return executor(sql, params, many, context) File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "/usr/lib/python3/dist-packages/django/db/utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) django.db.utils.DataError: value too long for type character varying(50)
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0001-models-prevent-too-long-error-on-Origin.slug-54047.patch 0001-models-prevent-too-long-error-on-Origin.slug-54047.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit bd8a6e32b62baa0a159cf22fd817b4a52e25ebc1 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Tue Aug 24 10:02:54 2021 +0200 models: prevent too long error on Origin.slug (#54047)
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
models: prevent too long error on Origin.slug (#54047)