Django 1.8的inspectdb命令根据文档没有看到PostgreSQL视图

Dav*_*son 6 python django postgresql views

我有一个带有PostgreSQL数据库的Django 1.8应用程序.我从命令行运行django inspectdb来检查视图的模型,但视图不会显示在模型输出中.

这是版本输出:

17:36 $ python well/manage.py --version
1.8.2
Run Code Online (Sandbox Code Playgroud)

这是psql看到的:

\dv
                List of relations
 Schema |             Name              | Type |  Owner  
--------+-------------------------------+------+---------
 public | hospitalizations_over_30_days | view | dwatson
 public | interval_30_days              | view | dwatson
(2 rows)
Run Code Online (Sandbox Code Playgroud)

从django 1.8.2文档:

New in Django 1.8:
A feature to inspect database views was added. In previous versions, only tables (not views) were inspected.
Run Code Online (Sandbox Code Playgroud)

如何让PostgreSQL视图出现在Django 1.8.2 inspectdb输出中?

Bre*_*inn 8

从 Django 1.10 开始,您可以简单地将单个视图命名为inspectdb命令的参数:

python well/manage.py inspectdb hospitalizations_over_30_days
Run Code Online (Sandbox Code Playgroud)

默认inspectdb只会输出表的models.py,但是视图的模型可以通过命名它们来单独生成。

在 Django 2.1 及更高版本中,如果您想inspectdb为所有表视图生成模型,请使用该inspectdb --include-views选项,由于这个问题,我为 Django 2.1 做出了贡献

python well/manage.py inspectdb --include-views
Run Code Online (Sandbox Code Playgroud)

要在 Django 2.0 及以下版本中为表和视图生成模型,您必须编辑 Django 源代码。在 Django 2.0 中,将第 57 行django/core/management/commands/inspectdb.py更改为:

tables_to_introspect = options['table'] or connection.introspection.table_names(cursor=cursor, include_views=True)
Run Code Online (Sandbox Code Playgroud)

请注意,生成的模型不会有带primary_key=Trueset 的字段,您需要手动添加主键。


Ahm*_*med 6

在最近的版本中,有一个选项可以通过将视图传递给命令来包含视图,如下所示(表和视图都将被检查):

python manage.py inspectdb --include-views > my_models.py
Run Code Online (Sandbox Code Playgroud)