Come vengono evitati i conflitti di scrittura nell'amministrazione di django?
-
10-07-2019 - |
Domanda
Supponiamo che ci siano due (o più) amministratori django che hanno letto un record del database e poi lo cambiano e lo salvano. Non ci sono problemi di database, ma alcuni amministratori saranno sorpresi che il record che hanno scritto sia stato sovrascritto.
Questo problema è mai stato risolto? Un modo sarebbe quello di avere una "modifica in corso" esplicita " pulsante che imposta una bandiera nel record. Se un altro amministratore legge lo stesso record e fa clic sulla sua "modifica in corso" verrà avvisato che è in corso una modifica precedente. Oppure è possibile aggiungere un campo al record che viene incrementato quando un record viene salvato. Se il campo è diverso da quando il record è stato letto, l'amministratore viene avvisato che il record è stato modificato da qualcun altro da quando lo ha letto.
Esiste un modo nativo di django per gestirlo?
Soluzione
L'amministratore di Django non implementa alcuna protezione dai conflitti di scrittura pronta all'uso. Non sarebbe difficile aggiungerlo da soli. Personalmente, prenderei il campo "numero versione" " approccio.
Altri suggerimenti
In genere è qui che vuoi leggere le funzionalità di isolamento delle transazioni del tuo database, perché è per questo che le ha.
Se preferisci davvero non farlo, esistono vari schemi per farlo a livello di applicazione, ma non esiste un modo canonico per farlo: alcune persone impostano una sorta di "ultimo accesso". data e ora e rifiutare di consentire la modifica entro un determinato periodo, altri impostano i numeri di versione, ecc. ecc.