【问题标题】:PostgreSQL view used in django (with managed=False) doesn't sync properlyDjango 中使用的 PostgreSQL 视图(使用 managed=False)不能正确同步
【发布时间】:2014-02-11 08:25:15
【问题描述】:

我需要在我的 django 应用程序(1.6 版)中使用数据库视图(使用 Postgres)。过程如下:

  1. 我创建了一个视图,然后运行 ​​python manage.py inspectdb 以获得正确的模型表示。
  2. 我已更改模型以反映这种情况。

这是视图的代码(它确实有效):

SELECT employee.employee_id, employee.firstname, employee.lastname, employee.birthdate, employee.is_active
FROM dblink( blah blah);

这是 django 模型的生成代码:

class Employee(models.Model):
    employee_id = models.IntegerField(blank=True, null=True)
    firstname = models.TextField(blank=True)
    lastname = models.TextField(blank=True)
    birthdate = models.DateField(blank=True, null=True)
    is_active = models.NullBooleanField()
    class Meta:
        managed = False
        db_table = 'employee'

我尝试过只使用managed(而不使用db_table)或同时使用两者。

无论如何,如果我使用 syncdb,我会收到这样的错误:

django.db.utils.ProgrammingError: referenced relation "employee" is not a table

好吧,这是真的,但我到底该怎么办?

我也玩过迁移,但我也遇到了一些错误:

django.db.utils.ProgrammingError: relation "dblink_test2_employee" does not exist

任何帮助表示赞赏?我是否忽略了一些你很清楚的事情?

【问题讨论】:

  • 我不了解 django,但您似乎正在尝试更新视图,而不是表格。
  • 嗯,它应该是这样工作的。您创建一个视图,然后告诉 django 无论如何不要更改它,方法是使用 managed = False

标签: django postgresql django-models


【解决方案1】:

在单独的机器上创建一个新的空数据库。 在一个临时的新应用(使用 startapp 创建)中使用从 inspectdb 生成的新 models.py 拉取代码 然后运行makemigrations。 这将在临时应用的迁移目录中创建初始迁移文件。

这是您的初始迁移文件。

将此复制到您的本地计算机。

【讨论】:

  • 新数据库的名称也将与旧数据库的名称相同。 (如果路由多个dbs)
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 2013-09-13
  • 2011-11-06
  • 1970-01-01
  • 2021-04-09
相关资源
最近更新 更多