Créasion d'un sérialiseur personnalisé
Pour transformer des objets Python en format JSON, créez un sérialiesur en héritant de serializers.Serializer :
from rest_framework import serializers
from eleves.models import Eleve
class EleveSerializer(serializers.Serializer):
identifiant = serializers.CharField()
nom = serializers.CharField()
genre = serializers.IntegerField()
naissance = serializers.DateField()
id = serializers.IntegerField(required=False)
creation = serializers.DateTimeField(required=False)
modification = serializers.DateTimeField(required=False)
def creer(self, donnees_validees):
return Eleve.objects.create(**donnees_validees)
def mettre_a_jour(self, instance, donnees_validees):
instance.identifiant = donnees_validees.get('identifiant', instance.identifiant)
instance.nom = donnees_validees.get('nom', instance.nom)
instance.genre = donnees_validees.get('genre', instance.genre)
instance.naissance = donnees_validees.get('naissance', instance.naissance)
instance.save()
return instance
Insertion de données via le sérialiseur
Utilisez le sérialiseur pour créer de nouvelles entrées :
from eleves.serializers import EleveSerializer
def ajouter_eleve():
donnees = {
'identifiant': 'E1001',
'nom': 'Sophie',
'genre': 2,
'naissance': '2019-05-15'
}
serialiseur = EleveSerializer(data=donnees)
serialiseur.is_valid(raise_exception=True)
serialiseur.save()
Transformation d'objets en JSON
Sérialisez des instances de modèle en structures JSON :
from rest_framework.renderers import JSONRenderer
from eleves.models import Eleve
def lister_eleves():
instances = Eleve.objects.all()
serialiseur = EleveSerializer(instances, many=True)
json_data = JSONRenderer().render(serialiseur.data)
return json_data
Modification d'enregistrements existants
Mettez à jour des objets via le sérialiseur :
def modifier_eleve():
donnees = {
'nom': 'Sophie Renommee',
'naissance': '2019-06-20'
}
instance = Eleve.objects.get(identifiant='E1001')
serialiseur = EleveSerializer(instance, data=donnees, partial=True)
serialiseur.is_valid(raise_exception=True)
serialiseur.save()