본문 바로가기
SERVER/Django

Django Serializer 자동 모델 생성 ( ModelSerializer(2) )

by 나스나키 2023. 6. 12.
728x90

외부키 사용

여기에서는 외래키를 사용되면 id 값이 나온다.

 

만약 다른 값을 원한다.

class UserSerializers2(serializers.ModelSerializer):
    User= serializers.StringRelatedField()

    class Meta:
        model = User
        fields = ['id', 'User', 'email', 'password']
        depth = 1

만약 User가 외래키라면 외와 같이 지정할 수 있으며

class User(models.Model):
    """
    사용자
    """
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=16)
    email = models.EmailField()
    password = models.CharField(max_length=65)

    def __str__(self):
        return self.name

    def __int__(self):
        return self.id

이중 str 이 출력된다.

 

이것을 응용하여

class UserSerializers(serializers.Serializer):
    """
    user
    """
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField()
    email = serializers.EmailField()
    password = serializers.CharField()

    def create(self, validated_data):
        return User.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.name = validated_data.get('name', instance.name)
        instance.email = validated_data.get('email', instance.email)
        instance.password = validated_data.get('password', instance.password)
        instance.save()
        return instance

class UserSerializers2(serializers.ModelSerializer):
    name = UserSerializers(read_only=True)
 
    class Meta:
        model = User
        fields = ['id', 'name', 'email', 'password']
        depth = 1

위의 serializer의 출력도 할수 있다.

 

여기에서는 read_only와 many 를 사용할 수 있다.

 

이와 비슷한 것으로 PrimaryKeyRelatedField 이란 것도 있는데

이것을 대상의 기본키를 출력한다.

 

더 큰 것으로

HyperlinkedRelatedField() 이란 것이 있는데 이것은 연결된 필드를 url으로 연결한다.

외래키 저장

출력되는 것을 바탕으로 저장하면 된다.

728x90