J'ai le problème suivant. Je dois créer un objet complexe en utilisant les données POSTed dans json. Dans le fichier models.py, j'ai l'objet principal appelé « Société »:Django - Comment désérialiser json dans un objet imbriqué
class Company(models.Model):
name = models.CharField(max_length=255)
descr = models.CharField(max_length=255)
def __str__(self):
return self.name
Ensuite, je dois « Bâtiment »:
class Building(models.Model):
name = models.CharField(max_length=255)
city = models.CharField(max_length=255)
location = models.TextField()
company= models.ForeignKey("Company", related_name="buildings", on_delete=models.CASCADE)
Et ainsi de suite avec quelques autres classes (ie « étage » , "Zone", "Chambre").
JSON que je reçois de la requête POST est:
{
"id": 1,
"buildings": [{
"id": 3,
"floors": [{
"id": 1,
"floor": -1,
"descr": "underground",
"building": 3
}],
"areas": [{
"id": 1,
"rooms": [{
"id": 1,
"floor": 1,
"area": 1,
"descr": "First Room"
}],
"descr": "Dev area",
"building": {
"id": 3,
"name": "Sede",
"city": "Rome",
"location": "mylocation",
"company": {
"id": 1,
"name": "Test",
"descr": "Test"
}
}
}],
"name": "Sede",
"city": "Rome",
"location": "mylocation",
"company": 1
}],
"name": "Test",
"descr": "Test"
}
Lorsque je tente de créer un objet « Société » du JSON que je reçois, il ne crée que ce qui suit:
{
"id": 1,
"buildings": [],
"name": "Test",
"descr": "Test"
}
et pas la structure complète.
Mes serializers sont les suivantes:
class BuildingSerializer(serializers.ModelSerializer):
floors= FloorSerializer(read_only=True, many=True)
areas = AreaSerializer(read_only=True, many=True)
class Meta:
model = Building
fields = '__all__'
read_only_fields = ('id',)
class CompanySerializer(serializers.ModelSerializer):
buildings= BuildingSerializer(read_only=True, many=True)
class Meta:
model = Company
fields = '__all__'
read_only_fields = ('id',)
Comment puis-je résoudre ce problème?
P.S. Je sais que le json est un peu redondant!
je l'ai déjà spécifié le format 'application/json' dans le * Content-Type * entête. –