relations emboîtéesdjango 1.11sérialiseur relations emboîtées ne fonctionnent pas comme il sholuld être
sérialiseur:
class PostDetailSerializer(ModelSerializer):
url = post_detail_url
user = UserSerializer(read_only=True)
image = SerializerMethodField()
html = SerializerMethodField()
tags = TagSerializer(many=True)
category = CategorySerializer()
source = SourceSerializer()
class Meta:
model = Post
fields = [
'id',
'url',
'title',
'image',
'slug',
'content',
'source',
'source_link',
'category',
'tags',
'html',
'publish',
'timestamp',
'user',
]
Réponse:
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"id": 3,
"url": "http://127.0.0.1:8000/api/v1/posts/new-postas/",
"title": "New Postaas",
"image": null,
"slug": "new-postas",
"content": "asssaasssasa",
"source": {
"id": 1,
"name": "prothom alo",
"slug": "prothom-alo"
},
"source_link": "http://prothom-alo.com/",
"category": {
"id": 2,
"url": "http://127.0.0.1:8000/api/v1/posts/category/news/",
"name": "news"
},
"tags": [
{
"id": 1,
"name": "tech",
"slug": "tech"
}
],
"html": "<p>asssaasssasa</p>\n",
"publish": "2017-08-31",
"timestamp": "2017-08-31T12:28:28.686538Z",
"user": {
"id": "ac32460f-fb7e-4755-9f7e-7c13085ee92b",
"email": "[email protected]",
"first_name": "Hasibul Amin",
"last_name": "Hemel"
}
}
Ceci est bien par rapport imbriqué récupération des données .
Mais encore une fois dans ma catégorie détails api sérialiseur ci-dessous:
class CategoryDetailSerializer(ModelSerializer):
url = category_detail_url
posts = PostDetailSerializer(many=True, read_only=True)
class Meta:
model = Category
fields = [
'id',
'url',
'name',
'posts'
]
Voici mon sérialiseur post ne transmet aucune donnée dans l'api. Je ne sais pas. il n'y a pas de bug ou d'erreur, juste la valeur ne vient pas.
La catégorie Détails Réponse api:
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"id": 2,
"url": "http://127.0.0.1:8000/api/v1/posts/category/news/",
"name": "news"
}
Y at-il une solution? J'ai cherché mais je n'en ai trouvé aucun.
Bonjour, je mets cela sur le modèle .. 'category = models.ForeignKey (Catégorie, related_name = 'cat_posts', default = 1) tags = models.ManyToManyField (Tags, related_name = 'rel_posts', help_text =" Sélectionnez les tags pour cette évaluation ") ' pour la catégorie y et tags.devrais-je changer la catégorie 'related_name' à' posts'? mais pourquoi? ne devrait pas autre que 'posts' ne fonctionnera pas? Je ne comprends pas. Pouvez-vous s'il vous plaît décrire à ce sujet? Je vous remercie. – Hemel
@Hemel des docs: 'Vous devez normalement vous assurer que vous avez défini un argument related_name approprié sur la relation, que vous pouvez utiliser comme nom de champ.' Donc, si vous avez un nom associé, vous devez également utiliser ce nom en sérialiseur. Ou vous pouvez essayer de définir la source sur le champ 'posts':' posts = PostDetailSerializer (many = True, read_only = True, source = 'cat_posts') '. – neverwalkaloner
Et comment 'post_set' ne fonctionnera pas' posts'? si dans votre modèle d'exemple donné 'related_name' est' posts'? – Hemel