2015-12-21 1 views
2

Les modèles sontDjango Rest cadre Nested urls

class Article(models.Model): 
    title = models.CharField(max_length=30) 

class Categories(models.Model): 
    article = models.ForeignKey(Article) 
    name = models.CharField(max_length=30) 

Il est possible d'utiliser DRF-extensions, comment il peut être utilisé.

Comment faire la configuration d'avoir des URL comme

/api/article/92285/categories 

Il devrait être en mesure de servir les réponses pour GET, POST et PUT

du format suivant

{ 
    "article_id": 92285, 
    "views": 0, 
    "downloads": 0, 
    "shares": 0, 
    "handle_url": "", 
    "title": "Test dataset", 
    "defined_type": "dataset", 
    "status": "Drafts", 
    "published_date": "", 
    "description": "Test description", 
    "total_size": 0, 
    "owner": { 
    "id": 13483, 
    "full_name": "John Carter" 
    }, 
    "authors": [ 
    { 
     "first_name": "John ", 
     "last_name": "Carter", 
     "id": 13483, 
     "full_name": "John Carter" 
    } 
    ], 
    "tags": [ 

    ], 
    "categories": [ 
    { 
    "id": 135, 
    "name": "Technology" 
    }, 
    ] 


    "files": [ 

    ] 
} 

-- 

Répondre

0

Ceci est un aperçu comment les choses fonctionnent dans DRF, mais si vous êtes nouveau, je recommande de passer par le official tutorial. Je ne peux pas mentionner tous les détails ici. Il est tout ce tutoriel vous demandez:

serializers.py

class CategorySerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Categorie 

class ArticleSerializer(serializers.ModelSerializer): 
    categories = CategorySerializer(many=True, read_only=true) 

    class Meta: 
     model = Article 

views.py

class ArticleListCreateApiView(generics.ListCreateAPIView): 
    model = Article 
    queryset = Article.objects.all() 
    serializer_class = ArticleSerializer 

class ArticleUpdateApiView(generics.UpdateAPIView): 
    model = Article 
    serializer_class = ArticleSerializer 

    def get_object(self): 
     boby_data = self.request.data 
     id = self.kwargs['id'] 
     # ... data processing 

urls.py

url(r'article/(?P<id>\d+)/categories$', ArticleUpdateApiView.as_view()) 
+0

la L'API de base fonctionne, vous souhaitez configurer des URL imbriquées comme/api/article/92285/categories – bobsr

+0

Dans ce cas, vous devez remplacer l'implémentation de méthode par défaut de chaque classe que vous utilisez, comme je l'ai fait avec UpdateAPIView. J'ai mis à jour le code. – DhiaTN