0

django を初めて使用し、ID のリストをサーバーに送信して情報を更新しようとしています。それらをモデルクラスにしたくありません。その必要はありません。私がやろうとしているのは、それらをシリアライザーに入れて「クリーン」であることを確認することです。これが私のコードです:

ビュー クラス:

class Update_Cards(APIView):
    # This seems necessary or it will throw an error
    queryset = Card.objects.all()
    def post(self, request, board_id, format=None):
        print request.DATA
        serializer = CardMoveSerializer(data=request.DATA, many=True)
        #this throws an error
        print serializer.data

        return Response(serializer.data)

シリアライザー:

class CardMoveSerializer(serializers.Serializer):
    card_id = serializers.IntegerField()
    lane_id = serializers.IntegerField()

私が得るエラー:

[{u'lane_id': 21, u'card_id': 3}] #this is to show the data is coming across the wire
Internal Server Error: /api/board/2/updateCards
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 115, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/Library/Python/2.7/site-packages/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/views/decorators/csrf.py", line 77, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/rest_framework/views.py", line 327, in dispatch
    response = self.handle_exception(exc)
  File "/Library/Python/2.7/site-packages/rest_framework/views.py", line 324, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/crob/Documents/workspace/tlckanban/python/rest/views.py", line 37, in post
    print card_moves.data
  File "/Library/Python/2.7/site-packages/rest_framework/serializers.py", line 499, in data
    self._data = [self.to_native(item) for item in obj]
TypeError: 'NoneType' object is not iterable

私がやったことは、今のところsimplejsonパーサーでこれを実装していますが、それを行うための最良の方法ではないように感じます:

def update_cards(request, board_id):
    json_data = simplejson.loads(request.body)

    for moveIndex in range(0, len(json_data)):
        #do some work


    return JSONResponse(json_data, status=status.HTTP_200_OK)

事前に助けてくれてありがとう!

4

2 に答える 2

0

Django のシリアライザーを使用していないようですが、検証のためにシリアライズが行われていません。フォームを使用してデータを検証し、それjsonをシリアライズするのと同じように使用します。Django のシリアライザーは、クエリセットとモデル専用です。

于 2013-07-17T18:26:57.673 に答える