我需要确保一个对象 ( 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)
1 回答
回首忆惘然
TA贡献1847条经验 获得超11个赞
首先是明显的免责声明:在代码中强加唯一约束会导致混乱和低性能。这就是 RDBMS 的用途(您有几个 :)。
也就是说,您当然可以遍历存储设备的每个数据库并检查是否存在匹配的设备。为此,您必须将每个数据库都包含在settings.DATABASES.
from django.conf import settings
for 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 文档中对多个数据库的有用介绍。
添加回答
举报
0/150
提交
取消