【问题标题】:Django 1.8 inspectdb command doesn't see PostgreSQL views as per documentation根据文档,Django 1.8 inspectdb 命令看不到 PostgreSQL 视图
【发布时间】:2015-08-10 04:43:39
【问题描述】:

我有一个带有 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 输出中?

【问题讨论】:

  • 找到解决方案是否成功?
  • 你做过这个工作吗?
  • 不,我没有找到解决方案。

标签: python django postgresql views


【解决方案1】:

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

python well/manage.py inspectdb hospitalizations_over_30_days

默认inspectdb只会输出table的models.py,但是view的model可以通过命名单独生成。

在 Django 2.1 及更高版本中,如果您希望 inspectdb 为所有表 视图生成模型,use the inspectdb --include-views 选项,我 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 的字段,您需要手动添加主键。

【讨论】:

  • 谢谢。一个疑问...您知道如何通过迁移以动态方式创建此视图,以及我们如何使用公用表吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-03
    • 2012-02-29
    • 2015-10-10
    • 2015-07-26
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多