Non sono un esperto di Django (ho fatto uno o due progetti di dimensioni moderate e, anni fa, ho fatto alcuni Rails), ma per quanto ne so: 
  As someone new to Django how common/acceptable is it to build your DB first and then use inspectdb to generate the models?
 Va bene. Il progetto Django  fornisce e documenti  inspectdb, quindi non c'è niente di sbagliato nell'usarlo. 
  Also inevitably your DB structure will change as you go through development, what are the best practices to deal with this and making sure the layers stay in sync.
 Le versioni correnti di Django forniscono migrazioni, proprio come fa Rails. Vedi  i documenti ufficiali  o vari tutorial, come  questo . In sostanza: 
-  Esegui   
./manage.py makemigrations    per creare le tue migrazioni. Django creerà automaticamente il codice Python per configurare un database in modo che corrisponda ai tuoi modelli Django.  
-  Esegui   
./manage.py migrate    per applicare le tue migrazioni.  
-  Ogni volta che hai cambiato i tuoi modelli, esegui   
./manage.py makemigrations   . Django ispezionerà automaticamente i tuoi modelli Django, vedrà cosa è cambiato dall'ultima volta che è stato eseguito e genererà il codice Python per sincronizzare il database con le modifiche del tuo modello.  
 Tieni presente che, se hai eseguito il   inspectdb   , i modelli generati hanno   managed=False   , quindi sono esclusi dalla logica di migrazione di Django. Mi piacciono molto le migrazioni, quindi dopo essermi assicurato che i miei modelli creati da inspectdb fossero buoni, avrei impostato   managed=True    e lasciato che Django gestisse i modelli da lì in poi. (Non ho esperienza con questo per sapere come funziona.) 
  How does syncing the DB and Django affect data existing in the DB too
 Le migrazioni modificano il database sul posto (come se si stessero emettendo manualmente comandi   ALTER TABLE    o qualsiasi altra cosa), quindi i dati vengono lasciati soli laddove possibile. Modifiche come l'aggiunta di una colonna potrebbero richiedere nuovi dati di default (Django può avvisarti se necessario); modifiche come la caduta di una colonna ovviamente perderanno dati.