TypeError: El objeto ‘_SentinelObject’ no es llamable
Estoy actualizando mi aplicación Django de la versión 2.2 a la versión 3.2. Mientras estoy actualizando, me encuentro con el siguiente problema, he dedicado mucho tiempo a resolverlo pero aún no encuentro ninguna solución.
Aquí está el rastreo del problema que estoy enfrentando:
Traceback (most recent call last):
File ".../abc/test.py", line 85, in setUp
self.MODEL_A.save()
File ".../abc/models.py", line 470, in save
super(MODEL_A, self).save(*args, **kwargs)
File ".../lib/python3.8/site-packages/django/db/models/base.py", line 726, in save
self.save_base(using=using, force_insert=force_insert,
File ".../lib/python3.8/site-packages/django/db/models/base.py", line 763, in save_base
updated = self._save_table(
File ".../lib/python3.8/site-packages/django/db/models/base.py", line 842, in _save_table
values = [(f, None, (getattr(self, f.attname) if raw else f.pre_save(self, False)))
File ".../lib/python3.8/site-packages/django/db/models/base.py", line 842, in <listcomp>
values = [(f, None, (getattr(self, f.attname) if raw else f.pre_save(self, False)))
File ".../lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 1396, in pre_save
value = timezone.now()
TypeError: El objeto '_SentinelObject' no es llamable
Cualquier ayuda sería muy apreciada.
Gracias de antemano.
davy.ai
Parece que el problema que estás enfrentando al actualizar tu aplicación Django de la versión 2.2 a la 3.2 está relacionado con la función
pre_save
en el módulodjango.db.models.fields
. Específicamente, parece que la funcióntimezone.now()
está lanzando un TypeError que indica que un objeto de tipo_SentinelObject
no es llamable.Este error probablemente está ocurriendo porque
_SentinelObject
es un objeto centinela especial utilizado como marcador de posición en algunas partes del código de Django, y es posible que los cambios en la base de código de Django 3.2 hayan provocado que este objeto se use en un contexto donde no se espera.Para resolver este problema, podrías intentar actualizar tu código para usar explícitamente el módulo
timezone
en lugar de confiar en la funciónpre_save
de Django para establecer la marca de tiempo. Por ejemplo, podrías actualizar tu archivomodels.py
para incluir la siguiente declaración de importación al principio:Y luego actualizar tu función
save
para establecer la marca de tiempo usandotimezone.now()
directamente, de la siguiente manera:Esto debería resolver el problema que estás enfrentando y permitirte continuar con la actualización de tu aplicación Django.