【RestFramework】 관련 모델 일람을 출력한다
12565 단어 django-rest-framework장고
관련 모델을 출력하는 법을 배웠으니 참고
전제
각 도도부현과 시구정촌이 관련된 모델을 준비
각 도도부현과 시구정촌이 관련된 모델을 준비
class Pref(models.Model):
pref_name = models.CharField(max_length=255, blank=True)
pref_code = models.CharField(max_length=255, blank=True)
def __str__(self):
return self.pref_name
class City( models.Model ):
city_name = models.CharField( max_length=255, blank=True )
city_code = models.CharField( max_length=255, blank=True )
pref = models.ForeignKey(Pref, on_delete=models.CASCADE, blank=True)
def __str__(self):
return self.city_name
데이터 등록
1. 관리 화면에서 적절하게 모델에 데이터를 등록한다.
이번은 테스트이므로 이런 느낌으로 등록했다.
도도부현
시구정촌
Serializer 등록
Serializer의 세세한 작성 방법은 할애합니다.
이번에는 Pref에 붙어있는 City 일람을 취득하는 것을 큰 목적으로 합니다.
from rest_framework import serializers
from .models import Pref, City, Plan
class CitySerializer(serializers.ModelSerializer):
class Meta:
model = City
fields = ['id', 'city_name', 'city_code']
class PrefSerializer(serializers.ModelSerializer):
city = serializers.SerializerMethodField()
class Meta:
model = Pref
fields = ['id', 'pref_name', 'pref_code', 'city']
def get_city(self, obj):
try:
city_child = CitySerializer(City.objects.all().filter(pref=Pref.objects.get(id=obj.id)),many=True).data
return city_child
except:
city_child = None
return city_child
포인트
city = serializers.SerializerMethodField()
추가하기 def get_city
로 검색하는 것입니다. 아래 코드는 CitySerializer에서 city 객체 목록을 검색하고 필터에서 관련 Pref 객체를 검색합니다.
마지막으로,
.data
를 붙이지 않으면 에러가 됩니다.city_child = CitySerializer(City.objects.all().filter(pref=Pref.objects.get(id=obj.id)),many=True).data
보기
이번에는 APIView를 상속하여 목록을 얻었습니다.
from django_filters import rest_framework as filters
from rest_framework import status, views
from rest_framework.response import Response
from rest_framework.exceptions import ValidationError
from .models import Pref, City
from .serializer import PrefSerializer, PlanSerializer, CitySerializer
class PrefFilter(filters.FilterSet):
class Meta:
model = Pref
fields = '__all__'
class PrefListApiView(views.APIView):
def get(self, request, *args, **kwargs):
#Prefオブジェクトを取得
filter_set = PrefFilter(request.query_params, queryset=Pref.objects.all())
#バリデーション
if not filter_set.is_valid():
raise ValidationError(filter_set.errors)
#serializerインスタンスの作成
serializer = PrefSerializer(instance=filter_set.qs, many=True)
# serializerをレスポンス
return Response(serializer.data, status.HTTP_200_OK)
결과는 이런 느낌
city_code 넣어 잊어버린...
고마워요.
Reference
이 문제에 관하여(【RestFramework】 관련 모델 일람을 출력한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Quest_love33/items/a8f7371973bac3ee2d66텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)