-1

こんにちは、

モバイル デバイスにサービスを提供するために、REST API を使用して django サーバーを実行しています。ある時点で、モバイル デバイスは Django と通信します。

デバイスが Django にデータベースにオブジェクトを追加するように要求しているとします。そのオブジェクト内で、次のように FK を設定する必要があります。

objectA = ObjectA.objects.create(title=title,
    category_id = c_id, order = order, equipment_id = e_id,
    info_maintenance = info_m, info_security = info_s,
    info_general = info_g, alphabetical_notation = alphabetical_notation,
    allow_comments = allow_comments,
    added_by_id = user_id,
    last_modified_by_id = user_id)

e_id と c_id がモバイル デバイスから受信された場合、この作成を呼び出す前に、それらが実際に DB にまだ存在するかどうかを確認する必要がありますか? これは 2 つの余分なクエリです...しかし、問題を回避できるのであれば、気にしません!

どうもありがとう!

4

2 に答える 2

1

Django はデフォルトで外部キーに制約を作成すると考えています (ただし、データベースに依存する場合があります)。これは、外部キーが存在しないものを指している場合、保存が失敗することを意味します (Python 側で例外が発生します)。

于 2013-03-11T16:16:50.823 に答える
0

単一のクエリに減らすことができます (少なくとも単一のクエリである必要があります。コードをテストしていないことを警告します)。

if MyObject.objects.filter(id__in=[e_id, c_id]).distinct().count() == 2:
    # create the object
    ObjectA.objects.create(...)
else:
    # objects corresponding e_id and c_id do not exist, do NOT create ObjectA

ユーザーからの情報や、特定のユーザーによって変更される可能性がある情報は、常に検証する必要があります。誰かがトラフィックを傍受し、サーバーへの独自の REST 要求を作成し始めることは難しくありません。システムに追加される外部データを常にクリーンアップして検証します。

于 2013-03-11T16:20:43.493 に答える