Django - 访问多个数据库中的值

我需要确保一个对象 ( Device) 只保存一次并且只保存到一个数据库中。


我有几个 PostGre SQL 数据库,如下所示:


                                       List of databases

             Name              | Owner | Encoding |  Collate   |   Ctype    | Access privileges 

-------------------------------+-------+----------+------------+------------+-------------------

 admin                         | admin | UTF8     | en_US.utf8 | en_US.utf8 | 

 postgres                      | admin | UTF8     | en_US.utf8 | en_US.utf8 | 

 reference                     | admin | UTF8     | en_US.utf8 | en_US.utf8 | 

 template0                     | admin | UTF8     | en_US.utf8 | en_US.utf8 | =c/admin         +

                               |       |          |            |            | admin=CTc/admin

 template1                     | admin | UTF8     | en_US.utf8 | en_US.utf8 | =c/admin         +

                               |       |          |            |            | admin=CTc/admin

 workspace_A                   | admin | UTF8     | en_US.utf8 | en_US.utf8 | 

 workspace_B                   | admin | UTF8     | en_US.utf8 | en_US.utf8 | 

 workspace_C                   | admin | UTF8     | en_US.utf8 | en_US.utf8 | 

 workspace_D                   | admin | UTF8     | en_US.utf8 | en_US.utf8 | 

工作区 A、B、C 和 D 都有一个名为的表devices_device,其中包含一个 ID、一个名称和一些其他字段。


在保存 a Device(覆盖 Djangosave()函数)以确保Device不存在具有相同参数的a时,我需要调用什么函数?


这是我目前概述的内容,带有问号的地方我不知道要使用哪个功能


def save(self, *args, **kwargs):

    for tab in ?.objects.all():

        if tab.object.using('devices_device')? == self.device_reference

        and ?.device_name == self.device_name

        and  ?.device_address == self.device_address

        and  ?.device_position== self.device_position

        and  ?.device_desciption == self.device_desciption:

            raise ValidationError(

                "This device already exists in another workspace!"

            )

    super().save(*args, **kwargs)


慕斯王
浏览 133回答 1
1回答

回首忆惘然

首先是明显的免责声明:在代码中强加唯一约束会导致混乱和低性能。这就是 RDBMS 的用途(您有几个 :)。也就是说,您当然可以遍历存储设备的每个数据库并检查是否存在匹配的设备。为此,您必须将每个数据库都包含在settings.DATABASES.from django.conf import settingsfor db in settings.DATABASES:    if YourModel.objects.using(db).filter(        # add your filter conditions here    ).exists():        raise ValidationError(            "This device already exists in another workspace!"        )            我假设您已经阅读了Django 文档中对多个数据库的有用介绍。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python