2017-01-21 6 views
0

Angenommen, ich habe Django Modelle zu schreiben, wie folgt:Wie Nested DRF Serializer mit zwei Fremdschlüsselfelder

class Car(models.Model): 
    name = models.CharField() 
    model = models.CharField() 
    type = models.CharField() 

class Scooter(models.Model): 
    name = models.CharField() 
    model = models.CharField() 
    type = models.CharField() 

class User(models.Model): 
    name = models.CharField() 
    car = models.ForeignKeyField() 
    scooter = models.ForeignKeyField() 

und die Serializer wie folgt:

class CarSerializer(serializer.ModelSerializer): 
    class Meta: 
    model = Car 
    fields = (
     'name', 
     'model', 
     'type' 

    ) 

class ScooterSerializer(serializer.ModelSerializer): 
    class Meta: 
    model = Scooter 
    fields = (
     'name', 
     'model', 
     'type' 

    ) 


class UservehicleCreateSerializer(serializer.ModelSerializer): 
    car = serializers.PrimaryKeyRelatedField(read_only=True) 
    scooter = serializers.PrimaryKeyRelatedField(read_only=True) 
    class Meta: 
    model = User 
    fields = (
    'name', 
    'car', 
    'scooter' 
    ) 

So das Szenario so etwas wie dieses: Die car Daten und scooter Daten sind bereits erstellt lassen Sie uns annehmen, beide haben pk=1. und ich möchte die User Daten mit dem Serializer jeweils erstellen. Aber kämpfen, um die tatsächliche Ressource für das gleiche in meinem Fall zu finden. Die Daten für Auto und Roller sind schon da, ich brauche sie nicht neu zu erstellen.

haben versucht, was ist hier in DRF Documentation for writing serialized nested.

und Daten für Api post request ist wie folgt:

{ 
    'name': "Nikhil", 
    'car': 1, 
    'scooter': 1 
} 

Erste Fehler:

IntegrityError: (1048, "Column 'car_id' cannot be null") 

auf dieses Ding Hilfe brauchen. Danke!

+1

Aber Sie haben hier keine verschachtelten Daten, so verschachtelte Serialisierer ist der falsche Ansatz. Ihre Benutzerdaten enthalten Links zu den Primärschlüsseln der zugehörigen Modelle. Verwenden Sie daher das [PrimaryKeyRelatedField] (http://www.django-rest-framework.org/api-guide/relations/#primarykeyrelatedfield). –

+0

Ok, ich verstehe diesen einen Aspekt meines Ansatzes (Mein Problem). Und als ich sie in das 'PrimaryKeyRelatedField' verwandelte, konnte ich keine Daten erstellen. –

+0

Also, was hast du versucht, und welchen Fehler hast du bekommen? –

Antwort

0

Versuchen Sie, die UservehicleCreateSerializer Schreiben wie folgt:

class UservehicleCreateSerializer(serializer.ModelSerializer): 
    car = CarSerializer(read_only=True) 
    scooter = ScooterSerializer(read_only=True) 
    class Meta: 
     model = User 
     fields = (
      'name', 
      'car', 
      'scooter' 
     ) 

Ausgabe aussehen wird:

{ 
'name': "Nikhil", 
'car': [ 
    'name': "Some name", 
    'model': "Some model", 
    'type': "Some type" 
    ], 
'scooter': [ 
    'name': "Some name", 
    'model': "Some model", 
    'type': "Some type" 
    ] 
} 

Ich hoffe, das ist das, was Sie brauchen. Prost! :)

+0

Nein, Sir, ich brauche das nicht –

Verwandte Themen