3

別のモデルと 1 対多の関係を持つオブジェクトのクエリセットをシリアライズしたいと考えています。関連するオブジェクトを json 出力に含めたいです。

例:

class Book(models.Model):
    title = models.CharField()
    author = models.ForeignKey('Author')

class Author(models.Model):
    name = models.CharField()

view.py:

serializers.serialize('json', Author.objects.all()) #does not include the book objects

簡単な解決策があると確信していますが、これまでのところ、その方法を理解できませんでした。ご協力いただきありがとうございます!

4

3 に答える 3

6

Authorモデルにはブックフィールドがないため、デフォルトのdjangoシリアライザーからは実行できません。独自のシリアライザーを作成するか、手動でデータを作成してsimplejson.dumps()に渡すことで、これを実現できます。

アップデート

例えば:

class Author(models.Model):
    ...
    def get_json(self):
        return {
            'id': self.id, 
            'name': self.name,
            'books': [{'id': b.id, 'title': b.title} for b in self.book_set.all()] }

from django.utils import simplejson
simplejson.dumps([a.get_json() for a in Author.objects.all()])
于 2012-12-27T09:40:05.680 に答える
1

JSON データをファイルにエクスポートしますか? その場合は、管理コマンドも使用できますdumpdata

python manage.py dumpdata your_app.Book your_app.Author > my_models.json

これにより、両方のモデルのデータがファイルに保存されますmy_models.json

代わりに、データをシリアル化して AJAX リクエストなどに使用する場合は、モデル データをディクショナリでラップできます。ビューで次のようにします。

# The querysets must be wrapped in list()
# otherwise they can't be serialized as JSON objects
response = {  
    'authors': list(Author.objects.all()),
    'books': list(Book.objects.all())
}

return HttpResponse(simplejson.dumps(response), mimetype='application/json')
于 2012-12-27T11:07:34.353 に答える