DjangoベースのWebアプリケーションを構築する過程で、私はエラーを見つけました。アプリケーションでは、私のAngular2フロントエンドは、バックエンドに次の形式のJSONオブジェクトを渡しPOSTリクエストを送信:Django Rest-Frameworkシリアライザ:確かに存在するフィールドにKeyErrorがスローされました
{
"variable": {
"name": "testVar"
}
}
プログラムの流れはポスト機能へと進む要求を受信しますこれはdjango rest-frameworkのAPIViewを継承した次のビューで定義されています。
class VariableAPIView(APIView):
permission_classes = (AllowAny,)
renderer_classes = (VariableJSONRenderer,)
serializer_class = VariableNameSerializer
def post(self, request):
variable = request.data.get('variable', {})
serializer = self.serializer_class(data=variable)
serializer.is_valid(raise_exception=True)
return Response(serializer.data, status=status.HTTP_200_OK)
シリアライザの主なロジックは、このコードスニペットで発生します。
ジャンゴ・サーバーが要求を受信すると、私は次の例外を取得class VariableNameSerializer(serializers.Serializer):
name = serializers.CharField(max_length=255)
def validate(self, data):
name = data.get('name', None)
if name is None:
raise serializers.ValidationError('A variable name is required.')
try:
value = server.ReadVariable(name)
except Exception:
raise serializers.ValidationError('A variable with this name could not be found')
return {
'value': value,
}
:私は右であることを確認していない私が理解から
KeyError: 'name'
During handling of the above exception, another exception occurred:
KeyError: "Got KeyError when attempting to get a value for field
name
on serializerVariableNameSerializer
. The serializer field might be named incorrectly and not match any attribute or key on thedict
instance. Original exception text was: 'name'."
を、エラーの意味はそれということです'name'という名前のフィールドが見つかりません。これはKeyErrorをスローします。しかし、私のコードでわかるように、 '名前'フィールドは確かに存在します。どちらのエラーでも、スタックトレースには私が書いた関数は含まれていないことがわかります。これはかなり奇妙で、初心者でもありません。
あなたが正しいです、これは機能しました。しかし、JSONに '' name ''の代わりに '' value''というプロパティを持たせたいのであれば、それは不可能でしょうか? –
レスポンスが編集されました。 – Linovia