django db scrive non succede subito durante l'esecuzione in loco di amministrazione

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

  •  13-09-2019
  •  | 
  •  

Domanda

Ho un frammento di codice come questo in un'applicazione 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)

Quando ho eseguito questo come parte della mia domanda, tutto funziona alla grande. In particolare, quando il mio altro sistema (esterno al Django) ottenere la notifica, controlla il database e il numero di widget viene aggiornato.

Tuttavia, quando si esegue il codice di cui sopra dal sito web di amministrazione, c'è un problema. Quando il mio altro sistema riceve la notifica, non vede il valore aggiornato nel database. Confermo mettendo un punto di interruzione e controllando nel database e non viene aggiornato dopo la chiamata a .save () - nel settore non-admin-site chiamare il DB viene aggiornato quando controllo durante questo punto di interruzione. Solo dopo ho lasciato l'applicazione faccia il suo corso, fa il DB si aggiorna.

È il middleware Django amministratore facendo una sorta di ritardare o rinviare od DB scrive?

Aggiorna

Ho anche trasferito la chiamata a notify_other_system_about_account_update(user_account) ad un gestore di segnale post_save sul mio oggetto UserAccount. I fuochi di segnalazione, ma quando ho capito. Il database aggiorna ad un certo punto dopo le mie dichiarazioni dei gestori di segnale. Questo comportamento si verifica solo se si esegue all'interno del sito web di amministrazione.

È stato utile?

Soluzione

Ho trovato il problema. L'amministratore Django utilizza le transazioni DB a livello di vista. Ho bisogno di commettere manualmente la transazione prima di notificare il sistema esterno

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top