オブジェクト(Device
)が1回だけ保存され、1つのデータベースにのみ保存されることを確認する必要があります。
私はいくつかのPostGreSQLデータベースを持っています:
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、名前、およびその他のフィールドを含むと呼ばれるテーブルがあります。
(Device
Djangosave()
関数を上書きして)保存するときにDevice
、同じパラメーターを持つがまだ存在していないことを確認するために、どの関数を呼び出す必要がありますか?
これは私が現在概説しているものであり、使用する関数がわからないところに疑問符が付いています
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)
最初の明らかな免責事項:コードに固有の制約を課すことは、混乱と低パフォーマンスのレシピです。それが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のドキュメントにある複数のデータベースの役立つイントロをすでに読んでいると思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加