django-rest-framwork 0.3.2 から最新の 2.1.9 に変換する際の問題のいくつかを解決した後、これを修正する方法がわかりません (これは Reinout のブログに同意します..... ..)
私はこのコードを持っていました:
class ApiSomeInputView(View):
form = ApiSomeForm
permissions = (IsAuthenticated, )
resource=SomeResource
def get(self, request):
"""
Handle GET requests.
"""
return "Error: No GET request Possible, use post"
def post(self, request, format=None):
some_thing = self.CONTENT['some_thing']
# check if something exist:
something = get_object_or_none(Something,some_field=int(some_thing))
if not something:
raise _404_SOMETHING_NOT_FOUND
#Note exludes are set in SomeResource
data = Serializer(depth=4).serialize(something)
return Response(status.HTTP_200_OK, data)
今、私はチュートリアルに従って、これを別の方法で行う方法を見てきました (おそらくもっときれいです)。URLでスラッグを使用する。
ただし....クライアント側ソフトウェアの下位互換性を維持したいので、URLにクエリの値を入れずにこれを持ちたいです。クライアント側は、投稿のヘッダーで json データと ContentType json を使用します。
django Rest Framework の最初のバージョンでは、このクエリの値を入力するための見栄えの良い閲覧可能なフォームさえ取得しました。
私の質問: 最新バージョンでこれを行うにはどうすればよいですか?
ビューでフォームを取得できないようです....値を入力してプロセスで使用できる場所
ソファまで試したことを投稿するのは良いかもしれません...
まず、シリアライザーで ModelResource を変更しました。
class SomethingSerializer(HyperlinkedModelSerializer):
class Meta:
model = Something
#exclude = ('id',)
depth = 4
ビューが次のように変更されました。
class ApiSomeInputView(APIView):
permissions = (IsAuthenticated, )
def post(self, request, format=None):
some_thing = request.DATA['some_thing']
# check if something exist: .... well actually this above already does not work
something = get_object_or_none(Something,some_field=int(some_thing))
if not something:
raise _404_SOMETHING_NOT_FOUND
serializer = SomethingSerializer(something)
return Response(status.HTTP_200_OK, serializer.data)
注:受け入れられた回答(Tom Christieによる)に基づいて、どのように機能したかを示す回答を追加しました(詳細)。