2016-05-10 10 views
3

私はDjango Rest Frameworkの新機能です。私は、JSON API標準(jsonapi.org)に従って私のモデルをシリアライズできる何かをドキュメントで見つけることができませんでした。JSON API標準のDjango Restフレームワークアプローチ

次のモデルがあるとします。

class Person(models.Model): 
    name = models.CharField(max_length=200) 


class Car(models.Model): 
    owner = models.ForeignKey(Person) 
    brand = 
    model = models.CharField(max_length=200) 
    plate = models.CharField(max_length=200) 

私はそれが次の出力を私に提供するような方法でそれをシリアル化したいと思います:

{ 
    "data":[ 
     { 
      "type": "Person", 
      "id": 1, 
      "attributes": { 
       "name": "John", 
      }, 
      "relationships": { 
       "cars": [ 
        { 
         "data": { 
          "type": "Car", 
          "id": 1, 
          "attributes": { 
           "brand": "Bugatti", 
           "model": "Veyron", 
           "plate": "PAD-305", 
          }, 
         }, 
        }, 
        { 
         "data": { 
          "type": "Car", 
          "id": 2, 
          "attributes": { 
           "brand": "Bugatti", 
           "model": "Chiron", 
           "plate": "MAD-054", 
          }, 
         }, 
        }, 
       ], 
      }, 
     }, 

     { 
      "type": "Person", 
      "id": 2, 
      "attributes": { 
       "name": "Charllot", 
      }, 
      "relationships": { 
       "cars": [ 
        { 
         "data": { 
          "type": "Car", 
          "id": 3, 
          "attributes": { 
           "brand": "Volkswagen", 
           "model": "Passat CC", 
           "plate": "OIJ-210", 
          }, 
         }, 
        }, 
        { 
         "data": { 
          "type": "Car", 
          "id": 4, 
          "attributes": { 
           "brand": "Audi", 
           "model": "A6", 
           "plate": "NAD-004", 
          }, 
         }, 
        }, 
       ], 
      }, 
     } 
    ], 

    "meta":{ 
     "backend_runtime": "300ms", // processed at the view 
    } 
} 
+0

私はかなり手動でそのフォームにモデルを変換しなければならないと確信しています –

+0

私はそれがORMの原則に違反すると思います。特定のJSON構造でモデルを表現するためにモデルを設計する必要はありません。柔軟な方法でDRFツールを表現するためのツールは何ですか? – Mauricio

+1

私はこのhttps://github.com/django-json-apiを推測します... –

答えて

1

あなたがデータにあなたが望む任意の方法を返すように、あなたのシリアライザを作成することができます。

:あなたは、正確なモデル構造を無視したい場合たとえば、あなたがあなたのモデルに近いシリアライザ構造をしたい場合は、次のアプローチを使用してモデルシリアライザを関連付けることができ、次の

を行うことができます

from rest_framework import serializers 

class CarSerializer(serializers.ModelSerializer): 
    """Serializes car object"""  
    class Meta: 
     model = Car 
     fields = ('id', 'brand',) 


class PersonSerializer(serializers.ModelSerializer): 
    """Serializes person and car relationship""" 
    car = CarSerializer(read_only=True) 

    class Meta: 
     model = Person 
     fields = ('id', 'name', 'car',) 

いずれの場合も、これらのフィールドを含むシリアライザ(およびネストされたモデルシリアライザ、既存のリレーションシップ)にクエリセットを渡します。

関連する問題