如何在Django中序列化单个对象的字段(不包括pk和模型)
在Django中,我有一个模型(它是从AbstractBaseUser继承来的):
class User(AbstractBaseUser):
username = models.CharField(max_length=20, unique=True)
realname = models.CharField(max_length=10)
grade = models.CharField(max_length=10)
studentNo = models.CharField(max_length=10)
email = models.EmailField()
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
我想把一个单独的用户对象序列化成:
{
"studentNo": "lu",
"realname": "lu",
"email": "admin@admin.com",
"grade": "lu",
"username": "admin",
"is_active": true
}
有没有什么工具可以用来序列化呢?
我找到了一份Django的文档。根据文档,它只能序列化一个列表,并且必须包含model
和pk
。就像这样:
[
{
"fields": {
"email": "admin@admin.com",
"is_active": true,
"studentNo": "lu",
"username": "admin",
"realname": "lu",
"grade": "lu"
},
"pk": 1,
"model": "account.user"
}
]
我还尝试了内置模块json
,但是我必须获取每个字段的键和值,保存到列表中,然后再进行序列化。这看起来不太优雅。
3 个回答
0
from django.core.serializers.json import Serializer
class CustomSerializer(Serializer):
def get_dump_object(self, obj):
return self._current
我在新的Django版本中使用这个
0
我有另一种方法可以做到这一点
import json
from models import User
UserList = [ {"studentNo": user.studentNo, "realname": user.realname, "email": user.email, "grade": user.grade,
"username": user.username, "is_active": user.is_active } for user in User.objects.all()]
f = open('jsonfile.txt','w')
json.dump(UserList,f,indent=4) # elegant output
f.close()
2
你可以像这样创建自定义的 Serializer
,
from django.core.serializers.json import Serializer, DjangoJSONEncoder
from django.utils import simplejson
class NewSerializer(Serializer):
def end_serialization(self):
cleaned_objects = []
for obj in self.objects:
del obj['pk']
del obj['model']
cleaned_objects.append(obj)
simplejson.dump(cleaned_objects, self.stream, cls=DjangoJSONEncoder, **self.options)