Champ supplémentaire lors de la sérialisation de django repos cadre
Je suis un newbie de django rest framework, et ont créé un exemple de Employee
modèle.
Mon models.py:
class Employees(models.Model):
created = models.DateTimeField(auto_now_add=True)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
Mon serializers.py:
class EmployeeSerializer(serializers.Serializer):
class Meta:
model = Employees
fields = ('first_name','last_name')
Cela fonctionne bien mais je veux un champ supplémentaire full_name
, qui sera first_name + last_name
.
Comment définir ce nouveau champ full_name
dans mon serializers.py
?
Vous devez vous connecter pour publier un commentaire.
Je vois deux façons ici (je préfère la première façon puisque vous pouvez la réutiliser dans d'autres parties de l'application):
ajouter une propriété calculée à votre modèle et l'ajouter à votre sérialiseur
en utilisant un readonly terrain avec source=
en utilisant SerializerMethodField
(votre modèle inchangé)
serializers.Field
a donné une erreur.serializers.ReadOnlyField
fonctionne sito_representation
n'est pas défini et que la vue est en lecture seule.full_name = serializers.ReadOnlyField()
, c'est à dire de jeter lasource
paramètre tout à fait. Comme le documentation dit à propos de lasource
paramètre: la valeur par défaut est le nom du champ. Sna il fonctionne même si c'est une méthode (ou une propriété)À condition que le
Employee
est un identifiant de connexion, puis la plupart d'entre nous utiliseronsdjango.auth.User
, je vais partager la façon dontEmployee
peut être mis en œuvre comme un autreProfile
(extension de django Utilisateur). Aussi, avec l'ajout defull_name.read_only
,first_name.write_only
, etlast_name.write_only
SerializerMethodField fonctionne bien, et nous pouvons également stocker des données dans sérialiseur de l'objet et de la méthode let
get_field_name
l'utiliser.Exemple: