2014-11-27 3 views
0

외래 키가있는 다른 인스턴스로 장고 모델 인스턴스를 직렬화해야합니다. 예 : 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

사용 파이썬 모듈 JSON

Json documentation

같은 것이 필요한 JSON을 반환하는 함수를 작성합니다.

1

personauthor 개체를 모두 serializers에 제공하여이 작업을 수행 할 수 있습니다.

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 
    } 
] 

당신은 simplejson 라이브러리를 사용하여 json 오브젝트로 변환 할 수 있습니다.

In [1]: import simplejson 

In [2]: ser_json = simplejson.dumps([ser_json[0]]) 
+0

@Dheerendra @Dheerendra 내 답변을 검토하여 귀하의 필요가 없다면 그것을 imrpove하고 싶습니다. –