一个简单的问题,Django有没有办法为标记为非托管的模型安装自定义sql?
我已经定义了自定义sql文件,并将其放在django文档所需的目录中:
Django提供了一个钩子,用于在运行migrate时传递在CREATE TABLE语句之后执行的数据库任意SQL。您可以使用这个钩子来填充默认记录,也可以创建SQL函数、视图、触发器等。
钩子很简单:Django只需查找一个名为sql/"的文件;型号名称";。sql,在您的应用程序目录中,其中"型号名称";是模型的小写名称。
src:https://docs.djangoproject.com/en/1.8/howto/initial-data/#providing-初始sql数据
问题是,当模型被标记为"0"时;managed=False";。
就我而言,django只是将自定义sql文件中的内容附加到CREATETABLE语句中。将行为解释为CREATE语句不存在。
但是Django有什么方法可以执行我的自定义sql吗?
我的非托管模型是数据库视图的模型,我试图用这个自定义sql创建它。我希望Django在运行";manage.py migrate";。
我不想把sql代码放在迁移文件中,因为它很长,我想保留在sql文件中。
我使用的是Django 1.8。
如果正确命名文件,则每次运行manage.py syncdb
时都会执行该文件。
然而,文件的命名有点棘手,并且从文档中看不清楚。例如,如果在MySQL上运行的名为MyApp的应用程序中有一个名为MyModel的非托管模型,那么应该有一个位于myapp/sql/mymodel.mysql.sql
中的文件。
此外,如果该文件包含SQL视图,则必须使用类似myapp_mymodel
的格式命名该视图。