我需要将带有外键的django模型实例序列化为另一个实例。 对于前。
class Person(models.Model):
first_name = models.CharField(max_length='30')
last_name = models.CharField(max_length='30')
class Author(models.Model):
reg_num = models.CharField(max_length = '30')
person = models.ForeignKey(Person)
所以在Authon实例的序列化版本中,我想要像
这样的东西[
{
"fields":
{
"reg_num": "CZG29742XD4",
"person":
{
"fields":
{
"first_name": "Dheerendra",
"last_name": "Rathor"
}
"model": "person.person",
"pk": 2
}
}
"model": "person.author",
"pk": 2
}
]
答案 0 :(得分:1)
这可以通过向person
提供author
和serializers
个对象来实现。
In [39]: from person.models import *
In [40]: from django.core import serializers
In [41]: query_obj = Author.objects.get(person__first_name = 'Dheerendra')
In [42]: ser_json = serializers.serialize('json', [query_obj, query_obj.person])
In [43]: ser_json
Out[43]: '[{"pk": 1, "model": "person.author", "fields": {"reg_num": "CZG29742XD4", "person": 1}}, {"pk": 1, "model": "person.person", "fields": {"first_name": "Dheerendra", "last_name": "Rathor"}}]'
In [45]: from ast import literal_eval
In [46]: ser_json = literal_eval(ser_json)
In [47]: ser_json[0]['fields']["person"] = ser_json[1]
In [48]: [ser_json[0]]
Out[48]:
[
{
'fields':
{
'reg_num': 'CZG29742XD4',
'person':
{
'fields':
{
'first_name': 'Dheerendra',
'last_name': 'Rathor'
},
'model': 'person.person',
'pk': 1
}
}
'model': 'person.author',
'pk': 1
}
]
您可以使用json
库将其转换回simplejson
对象。
In [1]: import simplejson
In [2]: ser_json = simplejson.dumps([ser_json[0]])
答案 1 :(得分:0)
答案 2 :(得分:0)
Django不支持这种深入的序列化
https://code.djangoproject.com/ticket/4656
您可以使用django rest framework或tastypie来执行此操作。两者都有能力做到这一点。