我想序列化模型:
class Schedule(models.Model):
Title = models.CharField(max_length=512)
class ScheduleEvent1(models.Model):
ScheduleContent = models.ForeignKey(Schedule)
Description = models.TextField()
class ScheduleEvent2(models.Model):
ScheduleContent = models.ForeignKey(Schedule)
AnotherField = models.TextField()
ShortDescription = models.TextField()
像serializers.serialize('json', Schedule.objects.all())
结果喜欢
[
{
"pk": 2,
"model": "Schedule",
"fields": {
"Title": "Some Title",
"ScheduleEvent1": [
{
"pk": 19,
"model": "ScheduleEvent1",
"fields": {
"Description": "Some Descr",
}
},
{
"pk": 20,
"model": "ScheduleEvent1",
"fields": {
"Description": "Some Descr2222",
}
}
],
"ScheduleEvent2": [
{
"pk": 15,
"model": "ScheduleEvent2",
"fields": {
"AnotherField": "Some text",
"ShortDescription" : "Some text ...",
}
}
]
}
}
总的来说。我有实体树。我需要从root序列化这个树。
tnx寻求帮助。
答案 0 :(得分:0)
http://docs.djangoproject.com/en/1.3/topics/serialization/#dependencies-during-serialization
涵盖了这个的本质。生成的文件不是精确所需的文件,因为对象不会嵌套。然而,这是Django默认生成的内容,它是Django用于反序列化的内容。
如果您使用Piston,您可以轻松定义一个将生成嵌套JSON的Handler,但它不会精确,因为Piston的JSON发射器不是精确地在Django中格式。
准确地 希望得到的东西导致扩展Django序列化程序以生成嵌套的JSON对象作为自然键。见http://code.djangoproject.com/browser/django/trunk/django/core/serializers/python.py。第47-59行
或者,您可以定义一个natural_key
方法,它使用Django的'django.core.serializers.json .Serializer`来发出对象的JSON序列化,而不是其他一些自然键值。这在语义上有点奇怪,但它可能会做你想要的。