2015-12-21 78 views
2

這些模型Django的REST框架嵌套的url

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

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

有使用DRF-擴展,它是如何被使用的可能性。

怎麼辦設置有像

/api/article/92285/categories 

網址,它應該能夠以服務爲GET,POST響應和PUT

從以下格式

{ 
    "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": [ 

    ] 
} 

-- 

回答

0

這是一個概述DRF中的事情是如何工作的,但如果您是新人,我建議您通過official tutorial。我不能在這裏提到所有細節。這是整個教程你有什麼要求:

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

的base API正在工作,想要設置嵌套的網址,例如/ api/article/92285/categories – bobsr

+0

在這種情況下,您應該重寫您使用的每個類的默認方法實現,就像我對UpdateAPIView所做的一樣。我更新了代碼。 – DhiaTN