Сериализация модели django с моделями внешнего ключа - PullRequest
3 голосов
/ 25 октября 2010

Как сериализовать модель Django в формате json, если я хочу включить поля моделей внешнего ключа?

Если у меня есть:

class Model1(models.Model):
    name=models.CharField()
    child=models.ForeignKey(Model2)

class Mode2(models.Model):
    field1=models.CharField()
    field2=models.IntegerField()

Я хочу включить все в JSON ...

Ответы [ 2 ]

2 голосов
/ 27 октября 2010

У меня были похожие проблемы, поэтому я взял код, который делал ранее, и улучшил его.Это фактически закончилось в полной структуре сериализации Python SpitEat.Вы можете скачать пробную версию здесь .Документация еще не очень хорошая, поэтому вот код, который вы должны использовать для сериализации вашей вещи:

>>> from spiteat.djangosrz import DjangoModelSrz #you should actually put spiteat in your path first
>>> Model1Srz = DjangoModelSrz.factory(Model1)
>>> srz_instance = Model1Srz(some_obj_you_want_to_serialize)
>>> srz_instance.spit()
... {
...    'pk': <a_pk>,
...    'id': <an_id>,
...    'name': <a_name>,
...    'child': {
...        'pk': <another_pk>,
...        'id': <another_id>,
...        'field1': <a_value>,
...        'field2': <another_value>
...    }
... }

Итак, полная, глубокая сериализация.Вы можете настроить вещи (выбрать, какие поля включены и т. Д. ... Но это еще не проверено и плохо документировано).Документ станет лучше в ближайшие дни, как и код, так что вы можете начать использовать его, не опасаясь, что поддержки не будет!

Конечно, как только ваш объект сериализован, просто используйте json как:

>>> import json
>>> json_srz = json.dumps(srz_instance.spit())

И у вас есть то, что вы пришли!

1 голос
/ 25 октября 2010

Иногда я не работал над Django, но эта работа для вас?

import simplejson as json

data = Model1.objects.get(pk=some_id)

to_dump =  {'pk': data.pk, 'name':data.name, 
           'fields':{'field_1':data.child.field_1, 
                     'field_2':data.child.field_2 
                    }
            }

json_data = json.dumps(to_dump)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...