是否可以编写一个Django模型,其中一个字段使用Postgresql函数作为其默认值?这是一个使用txid_current()作为默认值的简单示例:
% psql mydb=# CREATE TABLE test ( label text default '',txid BIGINT DEFAULT txid_current() ); CREATE TABLE mydb=# \d test Table "public.test" Column | Type | Modifiers --------+--------+------------------------ label | text | default ''::text txid | bigint | default txid_current() mydb=# INSERT INTO test (label) VALUES ('mylabel'); INSERT 0 1 mydb=# select * from test; label | txid ---------+-------- mylabel | 192050 (1 row)
该表的Django模型可能看起来像
class Test(models.Model): label = TextField('Label',default='') txid = BigIntegerField('txid',default=???)
解决方法
您可以将可调用指定为“默认”
https://docs.djangoproject.com/en/dev/ref/models/fields/#default
https://docs.djangoproject.com/en/dev/ref/models/fields/#default
让你的callable执行原始sql来获取你所追求的值
https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly
关于你的txid_current(),请务必阅读
https://docs.djangoproject.com/en/dev/topics/db/transactions/#django-s-default-transaction-behavior