1 to N 필드 한번에 저장하기
Posted on 2021-08-30 by GKSRUDTN99
Django Rest Framework
DRF
Serializer
Post 객체가 필드로 여러개의 ImageField를 가지고 있다고 가정한다.
model
# models.py
class Post(models.Model):
title = models.CharField(max_length=200)
class PostImage(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
image = models.ImageField(upload_to="post/%Y/%m/%d")
serializers.py
- 우선, 이미지를 직렬화할 PostImageSerializer를 둔다.
- Post 하나를 작성할 때 여러개의 이미지를 받아 한번에 저장할 것이므로, PostImageSerializer를 images 변수를 두어 가져온다.
- PostImageSerializer의
create()
함수를 override하여 구현한다.
class PostImageSerializer(serializer.ModelSerializer):
class Meta:
model = PostImage
fields = ['image']
class PostSerializer(serializer.ModelSerializer):
images = PostImageSerializer(many=True, read_only=True)
class Meta:
model = Post
fields = ['id', 'title', 'images']
def create(self, validated_data):
images_data = self.context['request'].FILES
post = Post.objects.create(**validated_data)
for image_data in images_data.getlist('image'):
PostImage.objects.create(post=post, image=image_data)
return post