à l'aide Django restDjango REST: objet imbriqué ajouter à créer (POST) non seulement la mise à jour (PUT)
est ci-dessous comment j'avais mon serializer.py.
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type')
type est un flatview
je puis changé si 'type' a été imbriqué pour chaque profil comme celui-ci ...
class TypeSerializer(serializers.ModelSerializer):
class Meta:
model = Type
fields = ('id', 'name', 'active')
class ProfileSerializer(serializers.ModelSerializer):
type = TypeSerializer()
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type'')
maintenant cela fonctionne parfaitement, mais je peux maintenant seulement mettre à jour 'type' quand dans le détail du profil, il est maintenant en lecture seule.
Comment puis-je ajouter le type lors de la création d'un nouveau profil et de toujours garder ce point de vue imbriquée?
J'espère que je l'ai expliqué clairement.
MISE À JOUR:
Ok, je viens de lire ceci:
Note: emboîtées serializers ne conviennent que pour en lecture seule représentations, comme il y a des cas où ils auraient ambiguës ou comportement non évident si utilisé lors de la mise à jour des instances. Pour les représentations en lecture-écriture , vous devez toujours utiliser une représentation plate, en utilisant l'une des sous-classes RelatedField.
Donc cela fait sens. Alors je l'ai changé ....
type = serializers.PrimaryKeyRelatedField()
Qu'il remet dans le poste et le travail, mais il est dommage, je peux pas représenter « type » avec ID et le nom de sorte qu'il est plus logique de la utilisateur final?
Je trouve que SlugRelatedField me permet de changer maintenant de l'identifiant à quelque chose de significatif comme le titre ou le nom du champ mais c'est en utilisant un flatfield non imbriqué. Je vais réessayer avec imbriqué et voir si le remplacement pourrait fonctionner. – jason
Pouvez-vous expliquer, comment pouvons-nous valider d'autres champs ici? – CrazyGeek