2

1 つだけを期待しているのに、複数の DB オブジェクトを作成するという問題に直面しています。

私のアプリケーション モデルは、Formのコレクションを持つ と のコレクションを持つ でFields構成FormEntryされていFieldEntriesます。与えられた に対して、フィールドごとFormEntryに 1 つしか期待できません。FieldEntry

これが私の問題です。私の UI は ajax を使用してフィールド エントリを送信します。送信を処理する Django コードはFieldEntry.objects.get_or_create()エントリを作成しますが、ある種の競合状態があるようです: 2 つの ajax 呼び出しが立て続けに発火すると (フィールドがフォーカスを失うとすぐに発火します)、2 番目の呼び出しget_or_create()が発生する可能性があります。最初のオブジェクトが完了する前に、2 つのオブジェクトを作成します。レース後にクリーンアップするコードを追加しましたが、フィールドが再び更新されない場合、コードは実行されません。公平を期すために、これが私の複数作成の問題につながるメカニズムであるかどうかさえわかりません。

問題は、これをどのように防ぐのが最善かということです。JS にある種のリソース ロックを実装して、同じフィールドの前回の更新が完了するまでフィールドの更新が発生しないようにすることはできますが、ロックが使用可能になるまで JS で適切に「遅延」する方法がわかりません。 .

Django/python でロックを実装することもできますが、それはさらに複雑だと思います。

4

3 に答える 3