【问题标题】:Postgres Sequences as Default Value for Django Model FieldPostgres 序列作为 Django 模型字段的默认值
【发布时间】:2017-11-10 16:19:31
【问题描述】:

我有一个 PostgreSQL 数据库,它被一个用 Django 构建的前端应用程序使用,但由 Node.js 中的一个抓取工具填充。我已经创建了一个sequence,我想在两个不同的表/实体中使用它,它可以通过一个函数(nexval(serial))访问并在每次插入时调用。这不是这些表的主键,而只是通过一些元数据来维护顺序的一种方式。在将数据插入表期间在 Node.js 中使用它是微不足道的,因为我使用的是原始 SQL 查询。但是,我正在努力解决如何使用 Django 模型来表示这一点。似乎没有任何方法可以将此 Postgres 函数与模型的字段相关联。

问题: 有没有办法使用 Postgres 函数作为 Django 模型字段的默认值?

【问题讨论】:

标签: python django postgresql orm


【解决方案1】:

您也可以为default设置自己的功能

from django.db import connection, models

def sequence_id():
  with connection.cursor() as cursor:
    cursor.execute("""SELECT nextval('model_someid_seq')""")
    return cursor.fetchone()[0]


class MyModel(models.Model):
  field_id = models.IntegerField(default=sequence_id)

【讨论】:

    【解决方案2】:

    我的最终解决方案:

    覆盖模型的save 方法,在覆盖内使用对SELECT nextval('serial') 的原始查询,将其设置为必要字段的值,然后在父级(super(PARENT, self).save())上调用save

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-19
      • 2011-06-04
      • 1970-01-01
      • 2014-12-07
      • 2017-01-28
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多