Disons que nous avons le modèle suivant:
class Classroom(models.Model):
room_number = [....]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
Disons qu'au lieu d'obtenir un résultat comme celui-ci par la fonction ManyRelatedPrimaryKeyField:
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
demandez-lui de renvoyer quelque chose qui inclut la représentation complète du modèle associé comme:
{
"room_number": "42",
"teachers": [
{
'id':'27,
'name':'John',
'tenure':True
},
{
'id':'24,
'name':'Sally',
'tenure':False
},
]
},
Est-ce possible? Si c'est le cas, comment? Et est-ce une mauvaise idée?
depth
ne ferais pas ce dont vous avez besoin dans ce cas, et pour expliquer l'exception que vous voyez et comment y faire face.many=True
comme ça...TeacherSerializer(source='teacher_set', many=True)
. Sinon, j'obtenais l'erreur suivante:The serializer field might be named incorrectly and not match any attribute or key on the 'RelatedManager' instance. Original exception text was: 'RelatedManager' object has no attribute 'type'.
..._set
par défaut. Consultez la documentation Django pour plus de détails: docs.djangoproject.com/en/1.10/ref/models/relationsMerci @TomChristie !!! Tu m'as beaucoup aidé! Je voudrais mettre à jour cela un peu (à cause d'une erreur que j'ai rencontrée)
la source
Cela peut également être accompli en utilisant un django dandy assez pratique appelé drf-flex-fields . Nous l'utilisons et c'est assez génial. Il vous suffit de l'installer
pip install drf-flex-fields
, de le passer via votre sérialiseur, d'ajouterexpandable_fields
et de bingo (exemple ci-dessous). Il vous permet également de spécifier des relations imbriquées profondes à l'aide de la notation par points.Ensuite, vous ajoutez
?expand=teacher_set
à votre URL et elle renvoie une réponse étendue. J'espère que cela aidera quelqu'un, un jour. À votre santé!la source