En un método save() personalizado del modelo Django, ¿cómo se debe identificar un nuevo objeto?

Resuelto MikeN asked hace 15 años • 15 respuestas

Quiero activar una acción especial en el save()método de un Modelobjeto Django cuando guardo un nuevo registro (sin actualizar un registro existente).

¿Es necesaria y suficiente la verificación de ( self.id != None) para garantizar que el registro automático sea nuevo y no esté actualizado? ¿Algún caso especial que esto pueda pasar por alto?

MikeN avatar May 26 '09 01:05 MikeN
Aceptado

Forma alternativa de verificar self.pkque podemos verificar self._stateel modelo.

self._state.adding is Truecreando

self._state.adding is Falseactualizando

lo saqué de esta página

SaintTail avatar Feb 26 '2016 08:02 SaintTail

Actualizado: Con la aclaración de que self._stateno es una variable de instancia privada, pero se llama así para evitar conflictos, la verificación self._state.addinges ahora la forma preferible de verificar.


self.pk is None:

devuelve True dentro de un nuevo objeto Modelo, a menos que el objeto tenga UUIDFieldcomo primary_key.

El caso extremo del que quizás deba preocuparse es si existen restricciones de unicidad en campos distintos del id (por ejemplo, índices únicos secundarios en otros campos). En ese caso, es posible que aún tengas un nuevo registro disponible, pero no puedas guardarlo.

Dave W. Smith avatar May 25 '2009 18:05 Dave W. Smith