模型 - 外键 db_column 命名问题

Phy*_*ist 5 python django model foreign-keys

我在 Django 中遇到db_column参数的问题。假设我在 models.py 中创建了一个模型:

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

并尝试对模型生成的表进行插入,插入操作的示例代码如下:

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

 dbQuery.save()
Run Code Online (Sandbox Code Playgroud)

发生的情况是系统在执行时抛出以下错误:

类型错误:“fk_gameId”是此函数的无效关键字参数

但是如果我更改插入语句的第一个参数,如下所示:

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

 dbQuery.save()
Run Code Online (Sandbox Code Playgroud)

然后它就可以完美地工作,尽管数据库中的列名称是“ fk_gameId ”,正如我在模型中定义的那样。

这是正常的还是我错过了什么。你能帮我理解这里的问题是什么吗?谢谢。

knb*_*nbk 4

更改数据库中db_column列的名称。它不会更改 Django 使用的模型属性的名称。

由于您已将字段定义为fk = models.ForeignKey(...),因此 Django 中的字段名称仍为fk,并且原始 id 字段名为fk_id

  • <field_name> + _id 被硬编码在 `ForeignKey.get_attname()` 中。 (4认同)
  • @Phyticist 正如@knbk 所说。您正在使用 db_column 更改数据库中的列名称。如果您想更改模型中的名称,只需写下您想要的名称即可。但是您将“fk”写入模型名称属性,因此当您查询时必须使用“fk_id”。如果属性为:`custom_name = models.ForeignKey(Game, db_column='fk_gameId')` 那么查询将为:`custom_name_id`。django 查询中不使用列名,而是使用属性名。 (2认同)