HoJunLee
HoJunLee

Reputation: 338

How can I get data argument from serializer?

I'm using Django and django-restframework.

I don't know How to access Serializer's argument.

I can access full json data from serializer.data. But when I tried to get argument like id, then it return error. serializer.data.id.

How can i get it? I used lots of time for search this, but failed.

I do this because update model based on user input.

e.g.

  1. user input id.
  2. get data with that id.
  3. save that data to database.

I'm very very thanks for reading this.

views.py

class CareerViewSet(viewsets.ModelViewSet):
    queryset = Career.objects.all()
    serializer_class = CareerSerializer
    permission_classes = (IsCreateable,)

    def perform_create(self, serializer):
        serializer.save(nickname='test')
        print(serializer.data)
        print(serializer.data.id)

Error

{'id': 14, 'created': '2017-04-26T12:39:58.249038Z', 'modified': '2017-04-26T12:39:58.249538Z', 'battle_tag': 'Fortune-1130', 'nickname': 'test', 'quick_eliminations': None, 'quick_damage_done': None, 'quick_deaths': None, 'quick_final_blows': None, 'quick_healing_done': None, 'quick_objective_kills': None, 'quick_objective_time': None, 'quick_solo_kills': None, 'competitive_eliminations': None, 'competitive_damage_done': None, 'competitive_deaths': None, 'competitive_final_blows': None, 'competitive_healing_done': None, 'competitive_objective_kills': None, 'competitive_objective_time': None, 'competitive_solo_kills': None, 'games_won': None, 'competitive_rank': None, 'level': None}
Internal Server Error: /career/
Traceback (most recent call last):
  File "E:\Development\Venv\20170420\myvenv\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
    response = get_response(request)
  File "E:\Development\Venv\20170420\myvenv\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "E:\Development\Venv\20170420\myvenv\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "E:\Development\Venv\20170420\myvenv\lib\site-packages\django\views\decorators\csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "E:\Development\Venv\20170420\myvenv\lib\site-packages\rest_framework\viewsets.py", line 83, in view
    return self.dispatch(request, *args, **kwargs)
  File "E:\Development\Venv\20170420\myvenv\lib\site-packages\rest_framework\views.py", line 483, in dispatch
    response = self.handle_exception(exc)
  File "E:\Development\Venv\20170420\myvenv\lib\site-packages\rest_framework\views.py", line 443, in handle_exception
    self.raise_uncaught_exception(exc)
  File "E:\Development\Venv\20170420\myvenv\lib\site-packages\rest_framework\views.py", line 480, in dispatch
    response = handler(request, *args, **kwargs)
  File "E:\Development\Venv\20170420\myvenv\lib\site-packages\rest_framework\mixins.py", line 21, in create
    self.perform_create(serializer)
  File "E:\Development\Venv\20170420\overmatch_django\overwatch\views.py", line 38, in perform_create
    print(serializer.data.id)
AttributeError: 'ReturnDict' object has no attribute 'id'

Upvotes: 1

Views: 16861

Answers (2)

Aayushi
Aayushi

Reputation: 73

Use serializer.data.get('id'). serializer.data.id doest not work since its not a class object, rather a json/dict.

Upvotes: 1

Moses Koledoye
Moses Koledoye

Reputation: 78556

serializer.data is a dictionary subclass (i.e. ReturnDict), access it as you would a vanilla dictionary:

id  = serializer.data['id']

Upvotes: 15

Related Questions