Django序列化获取具有主键对象的外键对象

时间:2014-11-27 06:43:08

标签: python django serialization

我需要将带有外键的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
    }
]

3 个答案:

答案 0 :(得分:1)

这可以通过向person提供authorserializers个对象来实现。

enter image description here

enter image description here

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)

使用python模块json

Json documentation

编写一个返回所需json的函数。

答案 2 :(得分:0)

Django不支持这种深入的序列化

https://code.djangoproject.com/ticket/4656

您可以使用django rest frameworktastypie来执行此操作。两者都有能力做到这一点。