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": [
]
}
--
答
这是一个概述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())
的base API正在工作,想要设置嵌套的网址,例如/ api/article/92285/categories – bobsr
在这种情况下,您应该重写您使用的每个类的默认方法实现,就像我对UpdateAPIView所做的一样。我更新了代码。 – DhiaTN