2012-10-29 5 views
5

Supposons que j'ai f sur le terrain dans mon modèle défini comme suit une clé étrangère:champ suffixe ForeignKey Django avec _id

f = models.ForeignKey(AnotherModel) 

Lorsque Django permet de synchroniser la base de données, le déposait des créé dans db sera appelé f_id, automatiquement suffixé avec '_id'.

Le problème est que je veux ce champ dans db nommé exactement comme ce que j'ai défini dans le modèle, f dans ce cas. Comment puis-je y parvenir?

Répondre

11

Eh bien, il se trouve qu'il y a un argument mot-clé appelé db_column. Si vous voulez que le champ appelé « f » dans la base de données est tout aussi simple que:

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

De plus Référence:

Le nom de la colonne de base de données à utiliser pour ce domaine. Si ce n'est pas le cas, Django utilisera le nom du champ. Si votre nom de colonne de base de données est un mot réservé SQL, ou contient caractères qui ne sont pas autorisés dans les noms de variables Python - notamment le trait d'union - c'est OK. Django cite les noms des colonnes et des tables derrière les scènes.

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

+1

Je pense que vous devriez préciser que cette option 'champ db_column' est nécessaire' AnotherModel', probablement en même temps que 'primary_key = TRUE' sur le champ' f'. – dschulz

+0

Merci @dschulz mais que voulez-vous dire par 'cette option de champ' db_column' est nécessaire dans 'AnotherModel' '? Parce que je ne pense pas que ce que 'f' est appelé dans la base de données a quelque chose à voir avec' AnotherModel', n'est-ce pas? –

+1

Oups! J'avais tort @Caperea, désolé. Mon brainfart était sur le nom de la colonne clé primaire dans 'AnotherModel'. Vous avez raison, l'utilisation de l'option de champ 'db_column' dans le champ' f' devrait suffire. – dschulz

Questions connexes