En un método save() personalizado del modelo Django, ¿cómo se debe identificar un nuevo objeto?
Quiero activar una acción especial en el save()
método de un Model
objeto 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?
Forma alternativa de verificar self.pk
que podemos verificar self._state
el modelo.
self._state.adding is True
creando
self._state.adding is False
actualizando
lo saqué de esta página
Actualizado: Con la aclaración de que self._state
no es una variable de instancia privada, pero se llama así para evitar conflictos, la verificación self._state.adding
es ahora la forma preferible de verificar.
self.pk is None:
devuelve True dentro de un nuevo objeto Modelo, a menos que el objeto tenga UUIDField
como 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.