2

有什么方法可以设置 django 模型的自动字段 id 以从数据库过程中选择其值。例如:

class Service(models.Model):

id = models.CharField(max_length=50, primary_key=True, default=database_procedure)
name = models.CharField(max_length=50)
icon = models.CharField(max_length=150, default='iconset-info.png')
description = models.TextField()

和数据库过程是这样的:

CREATE FUNCTION database_procedure() RETURNS trigger AS $database_procedure$
    BEGIN
       [...]
    END;
$database_procedure$ LANGUAGE plpgsql;
4

2 回答 2

1

您可以在默认值表达式中使用任何函数,包括您自己的函数——只要它返回合适的数据类型该手册规定

DEFAULT default_expr

DEFAULT子句为其列定义所在的列分配默认数据值。该值是任何无变量的表达式(不允许对当前表中的其他列进行子查询和交叉引用)。默认表达式的数据类型必须与列的数据类型匹配

大胆强调我的。
但是您显示的功能是触发功能(RETURNS trigger),不能用于此功能。

如果您的函数返回varchar或任何其他可以强制转换为列类型的类型,您可以使用它。应该只是default=myfunc()在 Django 中。它DEFAULT myfunc()CREATE TABLESQL 中。包括括号,在我的示例中为没有参数的函数为空。

于 2013-03-17T17:45:24.753 回答
0

为什么不随心所欲地使用?

默认值可能是可调用对象。因此,在一个函数中你可以转向数据库并做一些事情。

信号也可能对您有所帮助。

于 2013-03-17T17:50:26.397 回答