2016-04-19 11 views
1

ユーザーが作成および変更できるモデルはOrderです。モデルの一覧を読み、新しい作成をブロックする

管理者ユーザーは、曜日のすべての注文のリストを取得してリストを送信できます。

管理者がリストを送信する前に、現在の日の注文を終了するので、注文は翌日まで閉じられます。現時点で

、私は本当に競合状態を避けるためにどのように表示されていない。 - 管理者は、受注を閉じ、リスト を取得 - ユーザーが同時にオーダーを提出し、彼のために考慮されることを考えています。

私がこれまで想像したソリューションです:

  • 管理者は、フォームが掲載されている場合、注文が一日
  • のため閉鎖されていることを示している偽の順序を提出するボタンをクリックし、リストオーダーが検索されます
  • オーダーを送信する際に、私は最初に誤ったオーダーが存在するかどうかをチェックします。存在する場合、検証は失敗します。

しかし、私は競合状態はまだ可能だと思います。

データベースレベルで管理する可能性はありますか?たとえば、コマンドを閉じるときに、日付のデータベースに制約を追加します(新規注文の日付は、少なくとも翌日のデータでなければなりません)。

答えて

0

データベーストランザクションにアトミックデコレータを使用して、誤った順序をチェックすることができます。アトミックデコレータ内のチェックを追加して競合状態をチェックすると、エラーが発生し、終了日の管理者の注文がリセットされる可能性があります。 https://docs.djangoproject.com/en/1.9/topics/db/transactions/#django.db.transaction.atomic

+0

ありがとう、私はこれについて知りませんでした。私はそれを実装しようとしますが、とにかくそれは正しい解決策のように見えます。 – Dric512

関連する問題