根据文档,Django 1.8 inspectdb 命令看不到 PostgreSQL 视图

Django 1.8 inspectdb command doesn't see PostgreSQL views as per documentation

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

这是版本输出:

17:36 $ python well/manage.py --version
1.8.2

下面是 psql 看到的内容:

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

来自 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.

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

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

python well/manage.py inspectdb hospitalizations_over_30_days

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

在Django 2.1及以上版本中,如果你想inspectdb为所有表视图生成模型,use the inspectdb --include-views option, which I contributed to Django 2.1作为这个问题的结果!

python well/manage.py inspectdb --include-views

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

tables_to_introspect = options['table'] or connection.introspection.table_names(cursor=cursor, include_views=True)

请注意,生成的模型不会包含设置了 primary_key=True 的字段,您需要手动添加主键。

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

python manage.py inspectdb --include-views > my_models.py