2012-03-24 5 views
14

Creo una nuova app django (non progetto) chiamata Bussinesses, quindi aggiungo la classe seguente a models.py.Come rimuovere il prefisso di una tabella per un modello Django?

class Bussinesses(models.Model): 
    business_email = models.EmailField() 
    password = models.CharField(max_length=20) 
    contact_first_name = models.CharField(max_length=30) 
    contact_last_name = models.CharField(max_length=30) 

se io uso bussinesses direttamente, il Django accederà alla tabella "bussinesses_bussinesses" nel database, è evidente che non esiste.

Poiché la tabella "bussinesses" è utilizzata anche da un'altra APP, quindi non è possibile rinominarla. Voglio sapere come usare il modello Djano senza usare il prefisso della tabella, e non voglio usare direttamente l'API del database raw.

Grazie mille.

risposta

35

Basta usare lo model meta options.

class Bussinesses(models.Model): 
    business_email = models.EmailField() 
    password = models.CharField(max_length=20) 
    contact_first_name = models.CharField(max_length=30) 
    contact_last_name = models.CharField(max_length=30) 

    class Meta: 
     db_table = "bussinesses" 

BTW imprese si erra. Dato che stai specificando il nome della tabella, non devi dare al tuo modello lo stesso nome della tabella, quindi se il nome della tabella è errato e non puoi facilmente risolverlo, puoi almeno cambiare il nome di la tua classe alla corretta ortografia delle attività . Vorrei anche sbarazzarmi della pluralizzazione e renderla class Business. Infine, non è raro utilizzare Django o Rails su un database esistente per impostare un nome di tabella personalizzato per ogni tabella.

+1

Prego. Anche il consiglio di mgibsonbr sulla proprietà gestita è buono e potrebbe essere utile per sviluppare la tua app. –

2

È possibile specificare il nome della tabella in classe Meta del modello, utilizzando la proprietà db_table.

Inoltre, se si sta utilizzando una tabella di database già esistente, si potrebbe anche dare un'occhiata alla proprietà managed. Dopo aver impostato un modello su syncdb non gestito, ciò non avrà alcun effetto (se si ripristina l'app, ad esempio), ma è comunque possibile utilizzare normalmente l'ORM di Django.