當藉口中須要出現一對多關係的時候,咱們能夠用rest_framwork的序列化功能來處理,代碼以下.python
# models.py from django.db import models class PersonGoals(models.Model): name = models.CharField(max_length=100, verbose_name="目標名稱") desc = models.CharField(max_length=200, verbose_name="說明") status = models.IntegerField() class Meta: db_table = "person_goals" def __str__(self): return self.name class KeyResult(models.Model): name = models.CharField(max_length=100, verbose_name="結果名稱") desc = models.CharField(max_length=200, verbose_name="結果說明") status = models.IntegerField() person = models.ForeignKey(to=PersonGoals, on_delete=None, related_name="result") class Meta: db_table = "key_result" def __str__(self): return self.name
# serialize.py from rest_framework import serializers from apple.models import PersonGoals, KeyResult class KeyResultSerialize(serializers.ModelSerializer): class Meta: model = KeyResult fields = "__all__" class PersonSerialize(serializers.ModelSerializer): result = KeyResultSerialize(many=True) # 這裏的result是ForeignKey中的related_name class Meta: model = PersonGoals fields = "__all__"
# views.py from rest_framework.response import Response from rest_framework.views import APIView from apple.serializer import PersonSerialize, KeyResultSerialize from apple.models import PersonGoals, KeyResult class PersonView(APIView): def get(self, request): serialize = PersonSerialize(PersonGoals.objects.all(), many=True) return Response(serialize.data) class KeyResultView(APIView): def get(self, request): serialize = KeyResultSerialize(KeyResult.objects.all(), many=True) return Response(serialize.data)
# urls.py from django.urls import path from apple import views from rest_framework.urlpatterns import format_suffix_patterns urlpatterns = [ path("person/", views.PersonView.as_view(), name="person"), path("result/", views.KeyResultView.as_view(), name="result") ] urlpatterns = format_suffix_patterns(urlpatterns)
訪問接口 http://127.0.0.1:8000/person/django
HTTP 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/json Vary: Accept [ { "id": 1, "result": [ { "id": 1, "name": "學習多層接口處理方法", "desc": "使用1對多時的處理方法", "status": 1, "person": 1 }, { "id": 2, "name": "學習多層接口處理方法二", "desc": "不使用1對多處理", "status": 1, "person": 1 } ], "name": "rest_framwork深度學習", "desc": "深刻學習rest_framwork的api使用", "status": 1 } ]