# Django Rest_Framework(3) 모델 클래스 서열화기 ModelSerializer

3712 단어
만약 우리가 서열화기에 대응하는 Django의 모델 클래스를 사용하고자 한다면, DRF는 우리에게ModelSerializer 모델 클래스 서열화기를 제공하여 우리가serializer 클래스를 신속하게 만드는 것을 돕는다.
ModelSerializer는 일반적인 Serializer와 같지만 다음과 같은 기능을 제공합니다.
  • 모델 클래스를 바탕으로 일련의 필드를 자동으로 생성
  • 모델 클래스를 바탕으로 자동으로serializer에validators를 생성한다. 예를 들어uniquetogether
  • 기본create()와 업데이트()의 실현
  • 포함
    모델 클래스 서열화기 정의
    예를 들어 BookInfoSerializer를 만듭니다.
    class BookInfoSerializer(serializers.ModelSerializer):
        """        """
        class Meta:
            model = BookInfo
            fields = '__all__'
    
  • 모델은 어떤 모델 클래스를 참조하는지 가리킨다
  • fields는 모델 클래스의 어떤 필드 생성을 가리킨다
  • 우리는python 관리자에서py 셸에서 BookInfoSerializer 자동 생성
    >>> from booktest.serializers import BookInfoSerializer
    >>> serializer = BookInfoSerializer()
    >>> serializer
    BookInfoSerializer():
        id = IntegerField(label='ID', read_only=True)
        btitle = CharField(label='  ', max_length=20)
        bpub_date = DateField(allow_null=True, label='    ', required=False)
        bread = IntegerField(label='   ', max_value=2147483647, min_value=-2147483648, required=False)
        bcomment = IntegerField(label='   ', max_value=2147483647, min_value=-2147483648, required=False)
        image = ImageField(allow_null=True, label='  ', max_length=100, required=False)
    

    2. 필드 정보
    1.   **fields**     ,__all__        ,           ,  :
    
    class BookInfoSerializer(serializers.ModelSerializer):
        """        """
        class Meta:
            model = BookInfo
            fields = ('id', 'btitle', 'bpub_date')
    
    2.   **exclude**           
    
    class BookInfoSerializer(serializers.ModelSerializer):
        """        """
        class Meta:
            model = BookInfo
            exclude = ('image',)
    
    3.       ,  
    
    class HeroInfoSerializer(serializers.ModelSerializer):
        hbook = BookInfoSerializer()
    
        class Meta:
            model = HeroInfo
            fields = ('id', 'hname', 'hgender', 'hcomment', 'hbook')
    
    4.       
            **read_only_fields      ,            
    
    class BookInfoSerializer(serializers.ModelSerializer):
        """        """
        class Meta:
            model = BookInfo
            fields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment')
            read_only_fields = ('id', 'bread', 'bcomment')
    

    3. 추가 매개 변수 추가
    우리는 extra 를 사용할 수 있다kwargs 매개 변수는 ModelSerializer에 대한 기존 옵션 매개 변수를 추가하거나 수정합니다
    class BookInfoSerializer(serializers.ModelSerializer):
        """        """
        class Meta:
            model = BookInfo
            fields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment')
            extra_kwargs = {
                'bread': {'min_value': 0, 'required': True},
                'bcomment': {'min_value': 0, 'required': True},
            }
    
    # BookInfoSerializer():
    #    id = IntegerField(label='ID', read_only=True)
    #    btitle = CharField(label='  ', max_length=20)
    #    bpub_date = DateField(allow_null=True, label='    ', required=False)
    #    bread = IntegerField(label='   ', max_value=2147483647, min_value=0, required=True)
    #    bcomment = IntegerField(label='   ', max_value=2147483647, min_value=0, required=True)
    

    좋은 웹페이지 즐겨찾기