【问题标题】:I am facing issue while executing JSONRenderer.render(serialized_student_data.data) in Django我在 Django 中执行 JSONRenderer.render(serialized_student_data.data) 时遇到问题
【发布时间】:2023-02-15 20:20:44
【问题描述】:

我是 Django 的新手,每当我执行 json_data = JSONRenderer.render(serialized_student_data.data) 这行时,它都会给我错误TypeError: render() 缺少 1 个必需的位置参数:'data'

#这是models.py中的代码

class StudentModel(models.Model):
    name = models.CharField(max_length=100, default='user')
    roll_no = models.IntegerField(default=1)
    city = models.CharField(max_length=100, default='Ahmedabad')

#这是serializers.py中的代码

class StudentSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=100)
    roll_no = serializers.IntegerField()
    city = serializers.CharField(max_length=100)

#这里是views.py中的代码

def student_view(request):
    student_object = StudentModel.objects.get(id=3)
    serialized_student_data = StudentSerializer(student_object)
    json_data = JSONRenderer.render(serialized_student_data.data)
    return HttpResponse(json_data, content_type='application/json')

【问题讨论】:

  • 您应该在基于函数的视图上使用 @renderer_classes([JSONRenderer]) 并使用 return Response(serialized_student_data)
  • 您将 Serializer 实例作为数据传递,但可能意味着传递序列化的 .data.error。表示。它显示此错误。

标签: python-3.x django django-models django-rest-framework


【解决方案1】:

您应该创建 JSONRender 对象而不是使用类,代码将是,

    json_data = JSONRenderer().render(data=serialized_student_data.data)
    

【讨论】:

  • 我之前用过它,但它会抛出像这样的错误 render() missing 1 required positional argument: 'self'
  • 请确保您在 JSONRenderer 之后放置了括号 ()。或者只是将此行复制并粘贴到您的编辑器中,然后进行检查。
【解决方案2】:
create a separate render file in the same app you are working on.
code of a renderer will  work for all the views you are using add the 
renderer class where you want to use 

from rest_framework import renderers
import json

class StudentRenderer(renderers.JSONRenderer):
  charset='utf-8'
  def render(self, data, accepted_media_type=None, renderer_context=None):
    response = ''
    if 'ErrorDetail' in str(data):
      response = json.dumps({'errors':data})
    else:
      response = json.dumps(data)
    
    return response


then add the render class into the student view class 

first import the respective library.
from user.renderers import StudentRenderer

use this in the student view anywhere 
renderer_classes = [StudentRenderer]
 

【讨论】:

    猜你喜欢
    • 2023-02-17
    • 1970-01-01
    • 2022-10-20
    • 2013-02-08
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多