【问题标题】:Model - Foreign Key db_column Naming Issue模型 - 外键 db_column 命名问题
【发布时间】:2016-03-05 11:01:45
【问题描述】:

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

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' 是此函数的无效关键字参数

但是如果我改变插入语句的第一个参数如下:

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

 dbQuery.save()

尽管数据库中的列名是我在模型中定义的“fk_gameId”,但它可以完美运行。

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

【问题讨论】:

    标签: python django model foreign-keys


    【解决方案1】:

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

    由于你已经将字段定义为fk = models.ForeignKey(...),所以在Django中字段的名称仍然是fk,而原始id字段命名为fk_id

    【讨论】:

    • 那么我不能在Django中更改字段名称吗?它会一直是 myFieldNameForForeignKeyInModel + _id 吗?
    • + _id 硬编码在ForeignKey.get_attname()
    • 非常感谢您提供的信息。
    • @Phyticist 正如@knbk 所说。您正在使用 db_column 更改 DB 中列的名称。如果你想改变模型中的名字,你只需要写你想要的名字。但是你写了'fk'作为模型名称属性,所以当你查询时你必须使用fk_id。如果属性为:custom_name = models.ForeignKey(Game, db_column='fk_gameId'),则查询为:custom_name_id。 django 查询中不使用列名,而是使用属性名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2019-06-30
    • 2023-02-24
    • 2019-04-26
    相关资源
    最近更新 更多