Django db no escribe pasando inmediatamente cuando se ejecuta en el sitio de administración

StackOverflow https://stackoverflow.com/questions/992866

  •  13-09-2019
  •  | 
  •  

Pregunta

Tengo un fragmento de código como este en una aplicación Django

def update_account(user_account,add_widget_count):
    user_account.add_widgets(add_widget_count)
    user_account.save()

    notify_other_system_about_account_update(user_account)

Cuando ejecuto esto como parte de mi solicitud, todo funciona muy bien. En particular, cuando mi otro sistema (externo a Django) obtener la notificación, se comprueba la base de datos, y el recuento Reproductor se actualiza.

Sin embargo, cuando ejecuto el código de la página web de administración, hay un problema. Cuando mi otro sistema obtiene la notificación, que no ve el valor actualizado en la base de datos. Confirmo mediante la colocación de un punto de interrupción y en el registro de la base de datos y que no se actualiza después de la llamada a .save () - en el que no es administrador in situ llamar a la base de datos se actualiza cuando compruebo durante este punto de interrupción. Sólo después dejo que la aplicación siga su curso, no la base de datos se actualiza.

es el middleware Django administrador haciendo algún tipo de retrasar o diferir desde escribe DB?

Actualizar

Me moví incluso la llamada a notify_other_system_about_account_update(user_account) a un manejador de señales post_save en mi objeto UserAccount. Las señales de fuego, pero cuando lo reciba. La base de datos se actualiza en algún momento después de mis declaraciones de manejador de señales. Este comportamiento sólo ocurre si se ejecuta desde dentro de la Administración del sitio.

¿Fue útil?

Solución

He encontrado el problema. La administración de Django utiliza transacciones de base de datos de toda la vista. Necesito confirmación manualmente la transacción antes de notificar al sistema externo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top