0

我想就我遇到的问题提出一个问题,但我缺乏经验,我不确定这是否是最佳选择。

目前我们已经在我们的服务器中安装了“OCS 库存报告”,它保存了我们拥有的所有计算机的更新库存。我们的目的是使用这些数据在我们的 django 管理站点上查看。首先,我将在 ouer 应用程序中创建所有模型。当您在管理站点中创建计算机并保存时,OCS 数据库中的信息将被导入到 ouer 数据库中。

我不知道这是否是最好的方法。我不知道 django 提供的所有可能性。每次创建新对象时导入数据会很有效吗?是否有机会在管理界面中显示信息而不将其导入我的应用程序并直接攻击其他数据库?(对不起,我的英语不好)

4

1 回答 1

1

我假设您希望 django admin 只准备 OCS 数据库。

首先,您需要在 DATABASES 设置中定义外部数据库:

DATABASES = {
    'default': {
        ... django db settings here ...
    },
    'ocs_db': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}

你可以python manage.py inspectdb --database ocs_db试一试;inspectdb 在 db 上查找表并将模型定义转储为 python 模块。如果这不起作用,那么您必须手动进行。

然后,您希望 django 不管理该表(这样不会删除任何行,并且不会对表进行任何操作),您可以通过 Meta managed 选项来做到这一点。

我建议您使用此选项编写一个基类(以及最终所有 OCS 模型所需的其他自定义)。

class OCSBaseModel(models.Model):

    def save(self):
        """
        avoid inserts / edits from model
        """
        return 

    class Meta():
        abstract = True
        managed = False


class Workstation(OCSBaseModel):
    ...

作为最后一步,您需要指示 Django 为 OCS 模型使用正确的数据库。

为此,您需要编写一个数据库路由器,如此处所述

或为 OCS 模型实现一个 django 模型管理器,将每个查询集标记到数据库。例如。

class OCSModelManager(models.Manager):
    def get_query_set(self):
        return super(OCSModelManager, self).get_query_set().using('ocs_db')

请注意,我没有测试任何这段代码;)

于 2013-05-17T13:52:04.853 回答