django-restframework의serializer 처리 작용
1720 단어 django 시스템 개발 노트
class ManageDeliveryDetailSerializer(serializers.ModelSerializer):
user = serializers.HiddenField(
default=serializers.CurrentUserDefault()
)
dn = PLDeliveryinsSerializer()
class Meta:
model = DeliveryDetail
fields = '__all__'
n은 외부 키로 serializer를 실례화할 수 있으며 되돌아온 후에 구체적인 dn 실례를 얻을 수 있으며 모델에서 정의한 방법을 다시 작성할 수 있습니다 torepresentation 함수와 모델의 방법을 호출하여 전송된 데이터를 처리합니다
model.py에서 class Example: exa = model을 정의합니다.CharField() def foo(self): pass
serializer.py에서 class Example Serializer(serializer.Model Serializer) 호출: class Meta: model = Example fields ='all'
def to_representation(self, obj):
data = super(BatchProductSerializer, self).to_representation(obj)
exa = obj.foo()
data['exa'] = exa
return data
POST시: POST에서 온 데이터를 검증할 수 있습니다. 예를 들어serializer에username=serializers를 정의할 수 있습니다.CharField(required=True,allow blank=False,label='사용자',validators=[UniqueValidator(queryset=User.objects.all(),message='사용자가 이미 존재함')])는 전방에서 데이터를 전송하는 과정에서username 필드에 대해 유일성 검증을 하고 유일하지 않으면 사용자 이름이 이미 존재한다고 되돌려줍니다
같은 ViewSet에서 다른 serializer 클래스를 사용하면view에서 사용할 수 있습니다.py에서 서로 다른 HTTP 요청 유형을 동적으로 정의하는 serializer 클래스
def get_serializer_class(self):
if self.action == 'retrieve':
return ...Serializer
elif self.action == 'create':
return ...Serializer
return ...Serializer
PS:fields ='all'일 때 기본적으로 Serializer에서 만든 모든 새 필드와 기존 모델의 모든 필드를 되돌려줍니다