2017-01-26 3 views
1

Ich habe folgende MySQL-Tabellen:
-Stellen
-Model
-StylesErstellen einer API mit Django-Rest-Framework beitreten Tabellen

models.py (automatisch generiert)

class Makes(models.Model): 
    id = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=13) 
    nicename = models.CharField(db_column='niceName', max_length=13) 
    class Meta: 
     managed = False 
     db_table = 'Makes' 


class Models(models.Model): 
    id = models.CharField(primary_key=True, max_length=36) 
    name = models.CharField(max_length=23) 
    nicename = models.CharField(db_column='niceName', max_length=23) 
    make = models.ForeignKey(Makes, models.DO_NOTHING) 
    class Meta: 
     managed = False 
     db_table = 'Models' 

serializers.py

class MakeSerializer(serializers.ModelSerializer): 


    class Meta: 
    model = Makes 
    fields = ('name',) 


class ModelSerializer(serializers.ModelSerializer): 


make = MakeSerializer(many=True, read_only=True) 

class Meta: 
    model = Models 
    fields = ('make','id', 'name', 'nicename') 

views.py

Mit anderen Worten, Styles ist die übergeordnete Tabelle, die eine ID für Make und Model enthält, die die beiden verbindet.

Wie gehe ich über eine Beziehung mit DRF macht mir die erwartete Ausgabe zu geben:

"makes": [{ 
    "id": 1, 
    "name": "Acura", 
    "models": [{ 
     "id": "Acura_ILX", 
     "name": "ILX", 
     "styles": [{ 
        "id": "1" 
        "name": "Sport" 
        }] 
    }, { 
     "id": "Acura_ILX_Hybrid", 
     "name": "ILX Hybrid", 
     "styles": [{ 
        "id": "1" 
        "name": "Sport" 
        }] 
    }, { 
     "id": "Acura_MDX", 
     "name": "MDX", 
     "styles": [{ 
        "id": "1" 
        "name": "Sport" 
        }] 
     }] 

Antwort

2

Also im Grunde, was Sie tun müssen, ist eine Reihe von Serializer zu erstellen.

class MakeSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Make 
     fields = ('your', 'fields', 'here') 

class ModelSerializer(serializers.ModelSerializer): 
    make = MakeSerializer(many=True, read_only=True) 

    class Meta: 
     model = Model 
     fields = ('name', 'just_fields_here') 

class StyleSerializer(serializers.ModelSerializer): 
    model = ModelSerializer(many=True, read_only=True) 

    class Meta: 
     model = Style 
     fields = ('your_fields_here_again',) 

So könnten Ihre Serializer einfach aussehen.

Und das ist, wie Sie es verwenden könnte:

>>> make = Make.objects.create(name="Audi") 
>>> model1 = Model.objects.create(make=make, name='R8') 
>>> model2 = Model.objects.create(make=make, name='Q7') 
>>> Style.objects.create(model=model1, name='Sport') 
>>> Style.objects.create(model=model2, name='SUV') 

>>> serializer = MakeSerializer(instance=make) 

und von

>>> serializer.data 

Sie die Ausgabe verwenden, sollten wie folgt aussehen:

{ 
    'name': 'Audi', 
    'model': [{ 
     'name': 'R8', 
     'style': { 
      'name': 'Sport' 
     } 
    },{ 
     'name': 'Q7', 
     'style': { 
      'name': 'SUV' 
     } 
    }] 
} 
+0

Es ist nur ein Beispiel. Wenn Sie Daten gefüllt haben, erstellen Sie einfach diese Serialisierer. Laden Sie ein Objekt, an dem Sie interessiert sind, und übergeben Sie es als Instanz an den Serializer – sebb

+0

ist es gut? hast du das erwartet? – sebb

+0

Ich habe gerade meinen Beitrag bearbeitet, so dass du mein Setup sehen kannst. – Moshe