2017-05-17 13 views
0

私はDjango1.9、DRFシリアライザ - OrderDictの代わりにJSON

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'[email protected]'), ('UserContactNumber', u'992053268236'), ('UserPassword', u'[email protected]'), ('IsActive', True), ('Role', [u'Vendor Cordinator'])])] 

なぜJSON datを取得していないのですかOrderedDictの代わりに? JSON形式でデータを取得するにはどうすればよいですか?

答えて

1

レスポンスを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) 

参照:https://docs.djangoproject.com/en/1.9/topics/serialization/#serialization-formats-json

そして、あなたの最終的な目標は、HTTPレスポンスとしてそれを行うのであれば、あなたも、この使用することができます:https://docs.djangoproject.com/en/1.9/ref/request-response/#jsonresponse-objects

をも1.9とDjangoの1.11にアップグレードしようが無いです長くサポートされています。こんにちはあなたはシリアライザを使用することができますhttps://docs.djangoproject.com/en/1.11/howto/upgrade-version/

+0

を? –

+0

しかし、あなたは[Django Rest Framework](http://www.django-rest-framework.org/)も使っていますか? –

1

を::

from django.core import serializers 
data = serializers.serialize("json", MyUser.objects.all()) 

ドキュメントはこちらです:アップグレードする方法についてここでチェックhttps://docs.djangoproject.com/en/1.9/topics/serialization/

しかし、1.11にアップグレードしてください、1.9は、安全でないバージョン

でありますDRFのserializers.ModelSerializerはデフォルトでジョブを実行しますので、インストールすることをお勧めします。http://www.django-rest-framework.org/

1

Django REST Frameworkを使用していると思いますか?

これはDRFのTutorialまたはAPI Guideで十分に文書化されていません。しかし、例は、実際にクエリセットをシリアル化するためTutorial 1: Serializationに与えられる:

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) 
私は私のシリアライザで、それに合わせなければならない
関連する問題