简体   繁体   中英

Django rest framework serializer foreign key

so i have the following models in my models.py :

class Coordonnees(models.Model):
    latitude = models.CharField(max_length=20)
    longitude = models.CharField(max_length=20)
    def __str__(self):
        return self.latitude+','+self.longitude


class Ecole(models.Model):
    nomEcole = models.CharField(max_length=100)
    numTel = models.CharField(max_length=100)
    coordonnee = models.ForeignKey(Coordonnees, on_delete=models.CASCADE)
    def __str__(self):
        return self.nomEcole

and in my serializers.py :

class CoordonneesSerializer(serializers.ModelSerializer):
    class Meta:
            model = Coordonnees
            #our fields
            fields = ('id','latitude','longitude')



class EcoleSerializer(serializers.ModelSerializer):
    class Meta:
            model = Ecole
            #our fields
            fields = ('id','nomEcole','numTel','coordonnee')

well the problem is that when i check the json file of my "Ecole" i get the following output

[{"id":1,"nomEcole":"draoui","numTel":"28747484","coordonnee":1}]

so the question is : instead of having 1 in "coordonnee" i want to show the latitude and the longitude

The easiest way to generate nested representations is by using depth option inside the Meta class.

class EcoleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Ecole
        depth = 1
        fields = ('id', 'nomEcole', 'numTel', 'coordonnee')

Output will then be like:

[
    {
        "id":1,
        "nomEcole":"draoui",
        "numTel":"28747484",
        "coordonnee": [
            {
                "id": 1,
                "latitude": 0,
                "longitude": 0
            }
        ]
    }
]

You are looking to serialize a nested relationship in Django Rest Framework. To achieve this you can use the serializer of the nested model as a serializer field:

class EcoleSerializer(serializers.ModelSerializer):
    coordonnee = CoordonneesSerializer()

    class Meta:
        model = Ecole
        #our fields
        fields = ('id', 'nomEcole', 'numTel', 'coordonnee')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM