파이썬/장고

django nested/foreign key 관계 모델까지 가져오기

글을 쓰는 개발자 2021. 6. 23. 17:17
반응형
from django.db import models

class Blog(models.Model):
    title=models.CharField(max_length=25)

    def __str__(self) -> str:
        return self.title

class Image(models.Model):
    blogId=models.ForeignKey(Blog,on_delete=models.CASCADE,related_name="images")
    image=models.ImageField(default='media/제목없음.jpeg',upload_to="")

    def __str__(self):
        return self.image

여기에서 related_name="" 설정하는 것이 중요하다. 

자세한 내용은 아래 링크 참고

https://www.django-rest-framework.org/api-guide/relations/#api-reference

 

Serializer relations - Django REST framework

 

www.django-rest-framework.org

from django.db import models
from django.db.models import fields
from rest_framework import serializers
from .models import Image, Blog


class ImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Image
        fields = ['image']


class BlogSerializer(serializers.ModelSerializer):
    images = ImageSerializer(many=True, read_only=True)

    class Meta:
        model = Blog
        fields = ('id', 'title', 'images')
        depth = 1

    def create(self, validated_data):
        images_data = self.context['request'].FILES
        blog = Blog.objects.create(**validated_data)
        for image_data in images_data.getlist('images'):
            Image.objects.create(blogId=blog, image=image_data)
        return blog

fields에 해당 이름이 존재하면 그것('images')을 참고하여 움직인다.

 

반응형