2015-12-01 2 views
0

У меня возникли проблемы с db_column параметра в Django. Допустим, я создал модель в моем models.py:модель - внешний ключ db_column Именование Issue

class Stats(models.Model): 
    fk = models.ForeignKey(Game, db_column='fk_gameId') 
    score = models.IntegerField(default=0) 

и пытается сделать вставку в таблицу, которая генерируется из модели, образец кода для операции вставки, как:

dbQuery = Stats(fk_gameId = requestedGameId, 
       score = gameInfo['score']) 

dbQuery.save() 

, что происходит в том, что система выдает следующее сообщение об ошибке при выполнении:

TypeError: 'fk_gameId' is an invalid keyword argument for this function

Но если изменить первый параметр оператора вставки, как показано ниже:

dbQuery = Stats(fk_id = requestedGameId, 
       score = gameInfo['score']) 

dbQuery.save() 

, то он работает безупречно, хотя имя столбца в БД «fk_gameId», как я определил его в модели.

Это нормально или я что-то отсутствует. Можете ли вы помочь мне понять, в чем проблема? Спасибо.

ответ

0

db_column изменяет название столбца в базе данных. Он не изменяет имя атрибута model, используемого Django.

Поскольку вы определили поле fk = models.ForeignKey(...), имя поля в Django еще fk, а поле сырого идентификатора называется fk_id.

+0

Невозможно, чтобы я мог изменить имя поля в Django? Всегда ли будет myFieldNameForForeignKeyInModel + _id? – Phyticist

+0

+ _id жестко закодирован в 'ForeignKey.get_attname()'. – knbk

+0

Большое спасибо за информацию. – Phyticist

Смежные вопросы