2012-10-29 18 views
5

Supponiamo che io sono un campo f nel mio modello definito come segue come chiave esterna:Django campo suffisso ForeignKey con _id

f = models.ForeignKey(AnotherModel) 

Quando Django sincronizza database, l'Archiviato creato nel db sarà chiamato f_id, suffisso automaticamente con '_id'.

Il problema è che voglio questo campo in db chiamato esattamente come quello che ho definito nel modello, f in questo caso. Come posso ottenerlo?

risposta

11

Bene, si scopre che c'è un argomento di parole chiave chiamato db_column. Se si desidera che il campo denominato 'f' nel database è altrettanto semplice come:

f = models.ForeignKey(AnotherModel, db_column='f') 

Ulteriori riferimenti:

Il nome della colonna del database da utilizzare per questo campo. Se questo non è dato, Django userà il nome del campo.

Se il nome della colonna del database è una parola riservata SQL o contiene caratteri che non sono consentiti nei nomi delle variabili Python, in particolare trattino - è OK. Django riporta i nomi delle colonne e dei tavoli dietro le scene .

https://docs.djangoproject.com/en/dev/ref/models/fields/#db-column

+1

Penso che si dovrebbe mettere in chiaro che questa opzione 'db_column' campo è necessaria in' AnotherModel', probabilmente insieme a 'primary_key = true' sul campo' f'. – dschulz

+0

Grazie a @dschulz ma cosa intendi con 'questa opzione 'db_column' è necessaria in' AnotherModel''? Perché non penso che cosa si chiama 'f' nel database ha qualcosa a che fare con' AnotherModel', ho ragione? –

+1

Oops! Mi sono sbagliato @Caperea, mi dispiace. Il mio brainfart riguardava il nome della colonna chiave primaria in 'AnotherModel'. Hai ragione, l'uso dell'opzione di campo 'db_column' sul campo' f' dovrebbe essere sufficiente. – dschulz

Problemi correlati