問題タブ [django-rest-viewsets]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Django REST フレームワークが API エンドポイントを取得しない
Django REST フレームワークを使用するように API をリファクタリングしようとしています。私はurls.py
次のように変更しました(まだDjango 1.11にあります):
ただし、 にpython manage.py runserver
移動するとlocalhost:8000/api/v1.0/feedback/
、404 エラー応答が返されます。
r'^api/v1\.0/feedback/
に引数として渡されているにもかかわらず、エンドポイントが取得されていないようrouter.register()
です。これが機能しない理由はありますか?
python - Django Rest Framework: pk を指定せずに複数のオブジェクトを動的に更新/作成する
Django Rest Framework でこれまでに経験した中で最も困難な問題に出くわしました。最初にモデルを示し、次に説明します。
これらのモデルは、単純なスタンプカード モデルを表しています。スタンプカードは、スタンプカード形式の制限数が指示するのと同じ数のスタンプが関連付けられている場合、foreignkey を介していっぱいであると見なされます。次のことを行うビューを作成する必要があります。
- ビューは、uuid で構成されるスタンプ (以下を参照) のリストを取り込みます。
- 次に、指定されたスタンプごとに適切なスタンプカード形式を見つける必要があります。
次に、リクエストしたユーザーが対応する stampcardformat のスタンプカードを持っているかどうかを確認する必要があります。
a) ある場合は、スタンプカードがいっぱいかどうかを確認する必要があります。
i)満杯の場合は、指定された形式の新しいスタンプカードを作成し、作成したスタンプカードにスタンプ stampcard-foreignkey を更新する必要があります。
ii)いっぱいでない場合は、スタンプ stampcard-foreignkey を見つかったスタンプカードに更新する必要があります
b)ユーザーが指定された stampcardformat のスタンプカードを取得していない場合は、新しいスタンプカードを作成し、スタンプ stampcard-foreignkey を作成したスタンプカードに更新する必要があります。
スタンプのリクエスト本文リストは次のとおりです。
クラス ベースのビューは、この動作をサポートしていないようです。クラスベースのビューを変更しようとしましたが、役に立ちませんでした。ビューがエラーをスローするため、多くの点に加えて失敗します:
編集
追加のコンテキスト: pk、スラッグなどを含まない URL が必要です。したがって、URL は次のようになります。
それにプット(またはボディと機能を持つ任意のリクエスト)を実行します。私が書いたルートは次のとおりです。
編集:大規模な更新。それで、私はうまく機能するビューをまとめました。最初に、スタンプカード モデルを次のように更新しました (いっぱいになったかどうかを追跡するために、新しいフィールド 'done' を追加しました)。
次に、次のようにビューを書きました。
しかし、このコードには 2 つの問題があります。
- 私の直感では、モデル インスタンスで save() を呼び出すだけの部分 (例:
stamp.save()
) は、API にとって非常に安全ではないことがわかります。最初にデータをシリアル化することができませんでした。私の質問は: このビューはこのように大丈夫ですか? それとも何か改善できますか?たとえば、使用されるジェネリッククラスベースは使用しませんが、ここでそれらを使用する方法がわかりません... - この方法でスタンプカードがいっぱいになった場合は、スタンプカードも返却したいと思います。しかし、関係のないスタンプカードもすべて除外したいので、 を呼び出し
.exclude(done=True)
ました。残念ながらいっぱいになったスタンプカードは、do=True ですが! 途中で埋まったスタンプカードを戻り値に加えるにはどうすればよいですか?