【问题标题】:Django model with a custom field that uses a database default具有使用数据库默认值的自定义字段的 Django 模型
【发布时间】:2016-03-23 18:37:10
【问题描述】:

我正在尝试实现 IntegerField 的子类以在我的 Postgres 数据库上使用默认方法,而不是 django 默认方法(我知道这是一个热门话题)。为此,我在自定义字段上修改了以下方法

    def get_db_prep_save(self, value, connection):
        return 'default'

但是,当 django 执行 SQL 语句时,它看起来像这样:

INSERT INTO my_table ('default_column') VALUES ('default')

插入失败,因为default 关键字被引号包围。以下 SQL 语句有效:

INSERT INTO my_table ('default_column') VALUES (default)

我注意到问题在于 django 通过分别传递 SQL 语句和参数来执行 cursor.execute 的方式,从而导致 default 关键字被引号括起来。

我正在尝试找到一种无需重写 postgres 后端即可解决此问题的方法

非常感谢您的帮助

【问题讨论】:

    标签: sql django postgresql django-custom-field


    【解决方案1】:

    Reference

    from psycopg2.extensions import AsIs 
    
    def get_db_prep_save(self, value, connection):
        return AsIs('default')
    

    应该这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2010-10-19
      • 1970-01-01
      相关资源
      最近更新 更多