在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)
我想将单个User对象序列化为:
{
"studentNo": "lu",
"realname": "lu",
"email": "admin@admin.com",
"grade": "lu",
"username": "admin",
"is_active": true
}
有序列化的实用程序吗?
我找到了the document形式的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
,但我必须获取每个字段的键和值,保存到列表并序列化它。它看起来并不优雅。
答案 0 :(得分: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)
答案 1 :(得分: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 :(得分:0)
from django.core.serializers.json import Serializer
class CustomSerializer(Serializer):
def get_dump_object(self, obj):
return self._current
我在新的Django版本中使用它