Postgres序列作为Django模型字段的默认值

时间:2017-06-08 19:47:30

标签: python django postgresql orm

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

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

2 个答案:

答案 0 :(得分:1)

我的最终解决方案:

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

答案 1 :(得分:0)

您还可以为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)