python - 如何从序列化程序获取数据参数?

标签 python django django-rest-framework serialization

我正在使用 Django 和 django-restframework。

我不知道如何访问序列化程序的参数。

我可以从 serializer.data 访问完整的 json 数据。但是当我尝试获取像 id 这样的参数时,它会返回错误。 serializer.data.id.

我怎样才能得到它?我花了很多时间搜索这个,但没有成功。

我这样做是因为根据用户输入更新模型。

例如

  1. 用户输入id
  2. 获取具有该 id 的数据。
  3. 将该数据保存到数据库。

非常感谢您阅读本文。

View .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)

错误

{'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'

最佳答案

serializer.data 是一个字典子类(即 ReturnDict),像普通字典一样访问它:

id  = serializer.data['id']

关于python - 如何从序列化程序获取数据参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43635088/

相关文章:

python - 使用现有 Teradata 数据库定义供 Flask 应用程序使用的模型时出现“QVCI 功能已禁用”错误

Django - 表单在出错后重置值

python - django-allauth - RESTful API 返回属于用户的所有电子邮件地址

django - 使用 django-filter 进行 DRF 带注释的查询集过滤

python - SaltStack 模块与状态

python - 列表理解中的 index(max(my_list)) 给出最大值的所有实例,而不仅仅是第一次出现

python - 如何为python flask 应用程序提供结构

javascript - 我无法解决这个 "parsererror"ajax 错误

python - Django TemplateView 从数据库的字段获取模板

python - 尝试使用 django.client 批量上传到 django-rest-framework (ModelViewSets)