DRF 多级嵌套数据 完整例子
时间: 2023-08-11 18:43:48 浏览: 148
下面是一个 DRF 实现多级嵌套数据的完整例子,展示了如何使用 Serializer 嵌套来实现多级嵌套数据的 API:
models.py:
```python
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=50)
price = models.DecimalField(max_digits=8, decimal_places=2)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.name
```
serializers.py:
```python
from rest_framework import serializers
from .models import Category, Product
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ('id', 'name', 'price')
class CategorySerializer(serializers.ModelSerializer):
products = ProductSerializer(many=True)
class Meta:
model = Category
fields = ('id', 'name', 'products')
```
views.py:
```python
from rest_framework import viewsets
from .models import Category, Product
from .serializers import CategorySerializer, ProductSerializer
class ProductViewSet(viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
class CategoryViewSet(viewsets.ModelViewSet):
queryset = Category.objects.all()
serializer_class = CategorySerializer
```
在上面的例子中,Category 表示类别模型,其中包含了类别的名称,Product 表示产品模型,其中包含了产品的名称、价格和所属类别。在 ProductSerializer 中,表示产品的序列化器,只包含了产品的基本信息。在 CategorySerializer 中,表示类别的序列化器,通过 ProductSerializer 来嵌套表示产品的信息。在 CategoryViewSet 和 ProductViewSet 中,分别表示类别和产品的 API 视图集合,其中 CategoryViewSet 中的 queryset 包含了所有的类别,ProductViewSet 中的 queryset 包含了所有的产品。通过访问 /categories/ 可以获取所有的类别信息,包含了每个类别的所有产品信息。
阅读全文