使用Django REST framework构建包含父表和两个子表的API——从零基础到实战的详细步骤
# 假设我们有以下模型,并且已经创建了相应的数据库表。
from django.db import models
class Parent(models.Model):
name = models.CharField(max_length=100)
class ChildA(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.CASCADE, related_name='children_a')
detail = models.CharField(max_length=100)
class ChildB(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.CASCADE, related_name='children_b')
info = models.CharField(max_length=100)
# 在Django REST framework中定义序列化器。
from rest_framework import serializers
class ChildASerializer(serializers.ModelSerializer):
class Meta:
model = ChildA
fields = '__all__'
class ChildBSerializer(serializers.ModelSerializer):
class Meta:
model = ChildB
fields = '__all__'
class ParentSerializer(serializers.ModelSerializer):
children_a = ChildASerializer(many=True, read_only=True)
children_b = ChildBSerializer(many=True, read_only=True)
class Meta:
model = Parent
fields = '__all__'
# 现在,我们可以使用ParentSerializer在视图中返回父表和子表的数据。
from rest_framework import generics
class ParentListAPIView(generics.ListAPIView):
queryset = Parent.objects.all()
serializer_class = ParentSerializer
class ParentDetailAPIView(generics.RetrieveAPIView):
queryset = Parent.objects.all()
serializer_class = ParentSerializer
# 在urls.py中定义路由。
from django.urls import path
from .views import ParentListAPIView, ParentDetailAPIView
urlpatterns = [
path('parents/', ParentListAPIView.as_view()),
path('parents/<int:pk>/', ParentDetailAPIView.as_view()),
]
这个示例展示了如何在Django REST framework中定义一个包含父表和两个子表的API。首先定义了模型,然后创建了对应的序列化器,在序列化器中嵌入了子表的序列化数据。最后,定义了两个通用视图,分别用于展示父表的列表和单个父表的详细信息,以及相应的URL路由。这个示例提供了一个简洁而完整的API实现过程,对于学习如何使用Django REST framework来说是一个很好的教学资源。
评论已关闭