Django DRF序列化程序-OrderDict代替JSON

Django DRF序列化程序-OrderDict代替JSON,django,django-serializer,Django,Django Serializer,我是Django1.9的新手 models.py:- class MyUser(models.Model): UserId = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) UserFirstName = models.CharField(max_length=1000) UserLastName = models.CharField(max_length=1000)

我是Django1.9的新手

models.py:-

class MyUser(models.Model):

    UserId = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    UserFirstName = models.CharField(max_length=1000)
    UserLastName = models.CharField(max_length=1000)
    UserEmail = models.EmailField(max_length=1000,blank=False,null=True)
    UserContactNumber = models.CharField(max_length=1000)
    UserPassword = models.CharField(max_length=1000)
    IsActive = models.BooleanField(default=False)
    Role = ArrayField(models.CharField(max_length=1000), blank=True,null=True)

    class Meta:
        ordering =('IsActive',)
serializers.py:-

class MyUserSerializer(serializers.ModelSerializer):

    class Meta:
        model = MyUser
        fields = '__all__'
外壳输出:-

>>> from projectmanagement.serializers import MyUserSerializer
>>> users = MyUser.objects.all()
>>> users
[<MyUser: MyUser object>, <MyUser: MyUser object>]
>>> serializer = MyUserSerializer(users,many=True)
>>> serializer
MyUserSerializer([<MyUser: MyUser object>, <MyUser: MyUser object>], many=True):
    UserId = UUIDField(label='UserId', read_only=True)
    UserFirstName = CharField(label='UserFirstName', max_length=1000)
    UserLastName = CharField(label='UserLastName', max_length=1000)
    UserEmail = EmailField(allow_null=True, label='UserEmail', max_length=1000, required=False)
    UserContactNumber = CharField(label='UserContactNumber', max_length=1000)
    UserPassword = CharField(label='UserPassword', max_length=1000)
    IsActive = BooleanField(label='IsActive', required=False)
    Role = ListField(allow_null=True, child=CharField(label='Role', max_length=1000), required=False)
>>> serializer.data
[OrderedDict([('UserId', 'fd5df8d3-a578-4fe7-95ea-172ad2399ff8'), ('UserFirstName', u''), ('UserLastName', u''), ('UserEmail', None), ('UserContactNumber', u''), ('UserPassword', u''), ('IsActive', False), ('Role', None)]), OrderedDict([('UserId', '8301e1b6-a031-443f-957a-df98025e5e9f'), ('UserFirstName', u'Piyush'), ('UserLastName', u'Wanare'), ('UserEmail', u'piyush@uniserved.com'), ('UserContactNumber', u'992053268236'), ('UserPassword', u'Piyush@1234'), ('IsActive', True), ('Role', [u'Vendor Cordinator'])])]
>>从projectmanagement.serializers导入MyUserSerializer
>>>users=MyUser.objects.all()
>>>使用者
[, ]
>>>serializer=MyUserSerializer(用户,多个=True)
>>>序列化程序
MyUserSerializer([,],many=True):
UserId=UUIDField(label='UserId',只读=True)
UserFirstName=CharField(label='UserFirstName',最大长度=1000)
UserLastName=CharField(label='UserLastName',最大长度=1000)
UserEmail=EmailField(allow_null=True,label='UserEmail',max_length=1000,required=False)
UserContactNumber=CharField(label='UserContactNumber',最大长度=1000)
UserPassword=CharField(label='UserPassword',最大长度=1000)
IsActive=BooleanField(label='IsActive',required=False)
Role=ListField(允许\u null=True,child=CharField(label='Role',max\u length=1000),required=False)
>>>序列化程序.data
[OrderedDict([('UserId','fd5df8d3-a578-4fe7-95ea-172ad2399ff8'),('UserFirstName',u'),('UserLastName',u'),('UserEmail',None),('UserContactNumber',u'),('UserPassword',u'),('IsActive',False',('Role',None)],OrderedDict(('UserId','8301e1b6-a031-443f-957a-DF98025E5E5E9F'),('UserName',u'),('Piyush'),('UserName',Vanare'),(',('UserEmail',u'piyush@uniserved.com,('UserContactNumber',u'992053268236'),('UserPassword',u'Piyush@1234“),('IsActive',True),('Role',[u'Vendor Cordinator']])]
为什么我不获取JSON数据而不是OrderedDict?
如何获取JSON格式的数据?

首先需要将响应序列化为JSON格式

from django.utils.encoding import force_text
from django.core.serializers.json import DjangoJSONEncoder

class LazyEncoder(DjangoJSONEncoder):
    def default(self, obj):
        if isinstance(obj, YourCustomType):
            return force_text(obj)
        return super(LazyEncoder, self).default(obj)
见:

如果您的最终目标是将其作为HTTP响应,那么您也可以使用以下方法:


由于不再支持Django 1.9,请尝试升级到Django 1.11。请检查此处的升级方法:

您需要先将响应序列化为JSON

from django.utils.encoding import force_text
from django.core.serializers.json import DjangoJSONEncoder

class LazyEncoder(DjangoJSONEncoder):
    def default(self, obj):
        if isinstance(obj, YourCustomType):
            return force_text(obj)
        return super(LazyEncoder, self).default(obj)
见:

如果您的最终目标是将其作为HTTP响应,那么您也可以使用以下方法:


由于不再支持Django 1.9,请尝试升级到Django 1.11。请检查此处的升级方法:

您好,您可以使用序列化程序:

from django.core import serializers
data = serializers.serialize("json", MyUser.objects.all())
文件在这里:

但请升级到1.11,1.9是不安全的版本


使用DRF,
serializer.modelsializer
默认情况下执行此作业,因此安装它是一个好主意:

嗨,您可以使用序列化程序:

from django.core import serializers
data = serializers.serialize("json", MyUser.objects.all())
文件在这里:

但请升级到1.11,1.9是不安全的版本


使用DRF时,
序列化程序。默认情况下,ModelSerializer
会执行此任务,因此安装它是个好主意:

我猜您使用的是Django REST Framework

DRF的
教程
API指南
中没有很好地说明这一点。但
教程1:序列化
中实际给出了序列化查询集的示例:

serializer = SnippetSerializer(Snippet.objects.all(), many=True)
serializer.data
# [OrderedDict([('id', 1), ('title', u''), ('code', u'foo = "bar"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('id', 2), ('title', u''), ('code', u'print "hello, world"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('id', 3), ('title', u''), ('code', u'print "hello, world"'), ('linenos', False), ('language', 'python'), ('style', 'friendly')])]
要获取JSON格式的数据,请执行以下操作:

import json
serializer = MyUserSerializer(users,many=True)
json.dumps(serializer.data)

我猜您正在使用Django REST框架

DRF的
教程
API指南
中没有很好地说明这一点。但
教程1:序列化
中实际给出了序列化查询集的示例:

serializer = SnippetSerializer(Snippet.objects.all(), many=True)
serializer.data
# [OrderedDict([('id', 1), ('title', u''), ('code', u'foo = "bar"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('id', 2), ('title', u''), ('code', u'print "hello, world"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('id', 3), ('title', u''), ('code', u'print "hello, world"'), ('linenos', False), ('language', 'python'), ('style', 'friendly')])]
要获取JSON格式的数据,请执行以下操作:

import json
serializer = MyUserSerializer(users,many=True)
json.dumps(serializer.data)

只需将此代码放在setting.py文件中即可

REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
    'rest_framework.parsers.JSONParser',
]}
并通过以下方式获取JSON数据:

serializer.data

只需将此代码放在setting.py文件中即可

REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
    'rest_framework.parsers.JSONParser',
]}
并通过以下方式获取JSON数据:

serializer.data

我应该把它放在我的序列化程序中的什么地方?快速提问,你也在使用吗?我应该把它放在我的序列化程序中的什么地方?快速提问,你也在使用吗?