如何在Django

时间:2015-06-24 15:56:51

标签: django postgresql

一个简单的问题,有没有一种方法Django可以为模型安装自定义sql,标记为非托管?

我已经定义了自定义sql文件并将其放在django文档中所需的目录中:

  

Django提供了一个钩子,用于在运行迁移时传递数据库任意SQL,该SQL在CREATE TABLE语句之后执行。您可以使用此挂钩填充默认记录,也可以创建SQL函数,视图,触发器等。

     

钩子很简单:Django只在你的app目录中查找名为sql /“modelname”.sql的文件,其中“modelname”是小写的模型名称。

src:https://docs.djangoproject.com/en/1.8/howto/initial-data/#providing-initial-sql-data

问题是当模型标记为“managed = False”时它不起作用。

就我而言,django只是使用自定义sql文件中的内容附加CREATE TABLE语句。这解释了CREATE语句不存在时的行为。

但Django有没有办法执行我的自定义SQL?

我的非托管模型是数据库视图的模型,我尝试使用此自定义sql创建。我希望Django在运行“manage.py migrate”时自动运行这个sql。

我对将sql代码放在迁移文件中并不感兴趣,因为它很长,而且我想保留在sql文件中。

我正在使用Django 1.8。

1 个答案:

答案 0 :(得分:0)

如果您正确命名文件,则每次运行manage.py syncdb时都会执行该文件。

然而,文件的命名有点棘手,并且从文档中不清楚。例如,如果在MySQL上运行的名为MyApp的应用程序中有一个名为MyModel的非托管模型,那么您应该在myapp/sql/mymodel.mysql.sql中找到一个文件。

此外,如果该文件包含SQL视图,则必须使用myapp_mymodel等格式命名视图。