【问题标题】:How to use serializer in Django REST Framework如何在 Django REST 框架中使用序列化程序
【发布时间】:2018-07-11 03:22:12
【问题描述】:

我是 Django REST 框架的新手。这是一个非常菜鸟的问题,但我无法理解序列化程序是如何工作的?我们如何向序列化程序发送数据以及如何从中获取数据。
我正在尝试将我的查询集序列化为字典列表。
这是我的views.py

def get(self,request):
    z= int(request.GET.get('q',''))
    queryset=[]
    queryset.append(models.Cart.objects.filter(UserId=z).values('id'))
    k=[]
    for values in queryset:
        k.append(models.ProductsDiscription.objects.filter(id=values).values())
    abc = serializers.NewSerializer(k,many=True)
    return JsonResponse({'pcartlist':((abc))})

如果我不使用序列化程序,我会收到错误:

k:queryset is not json serializable.

所以我尝试创建一个序列化程序,但是我仍然遇到同样的错误。我不知道如何使用序列化程序。

serializers.py

class NewSerializer(serializers.Serializer):
    product_id= serializers.IntegerField()

k 是字典列表,我也不知道该使用哪个字段。

我尝试从所有可能的地方阅读和理解,但我无法理解序列化程序的工作原理。请帮助我,如果可能的话,举一个非常简单的例子。这将非常有帮助。

【问题讨论】:

    标签: json django serialization django-rest-framework


    【解决方案1】:

    请将查询集直接传递给序列化程序。如果要序列化模型,可以使用modelSerializer。模型序列化程序还需要模型名称作为 META 属性。文档可以在here找到

    序列化查询集:

    qs = YourModel.objects.all()
    serializer = YourSerializer(qs, many=True)
    

    序列化后的结果可以从serializer.data获取。你可以print (serializer.data)查看结果。

    【讨论】:

    • 我知道Modelserializer。我只是想知道我将如何将数据发送到序列化程序并取回序列化数据。因为它是一个获取请求,我必须返回数据而不是保存它.
    • 编辑回复以反映您的其他问题。
    • 如果要存储字典,请使用 python json 库将字典转换为字符串。你可以做string_dict = json.dumps(dict)。稍后当你想使用dict时,你可以dict = json.loads(string_dict)。然后,您可以为此使用serializers.TextField