inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

포스팅 쓰기 화면 및 API 구현

(수정)한 포스팅에 사진 여러장을 업로드하려고 수정해봤습니다

해결된 질문

449

윤해빈

작성한 질문수 23

0

하나의 포스팅에 여러 이미지들을 업로드하는 코드를 선생님 강좌를 보면서 나름대로 수정해봤는데 코드가 많이 엉킨 것 같습니다.

우선 코드부터 보여드리자면

mainfunc/models.py

from django.db import models
from django.conf import settings
from django.contrib.auth.models import User


#Label 테이블 -- 유저(외래키), 레이블
class Label(models.Model):
    id = models.BigAutoField(primary_key=True)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
    label_name = models.CharField(max_length=50, default='')

#Post 테이블 -- 레이블(외래키), 이미지
class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
    label = models.ForeignKey(Label, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='images/%Y/%m/%d', blank=True, null=True)

    def __str__(self):
        return f'{self.label}'


mainfunc/serializers.py

from rest_framework import serializers
from .models import Post, Label
from django.contrib.auth import get_user_model

class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields = '__all__'

class PostSerializer(serializers.ModelSerializer):
    # post에서 이미지를 한번에 입력받아서 저장할 것이기 때문.
    image = serializers.ImageField(use_url=True)
    class Meta:
        author = AuthorSerializer(read_only=True)
        model = Post
        fields = ['image']

class LabelSerializer(serializers.ModelSerializer):
    images = PostSerializer(many=True, read_only=True)

    def get_images(self, obj):
        image = obj.post_set.all()
        return PostSerializer(instance=image, many=True).data

    class Meta:
        model = Label
        fields = ['author', 'label', 'images']
       # fields = '__all__'

    def create(self, validated_data):
        instance = Label.objects.create(**validated_data)
        image_set = self.context['request'].FILES
        for image_data in image_set.getlist('image'):
            Post.objects.create(label=instance, image=image_data)
        return instance

mainfunc/views.py

from rest_framework.viewsets import ModelViewSet
from .serializers import PostSerializer
from .models import Post
from rest_framework.permissions import AllowAny
from django.db.models import Q

# CRUD가 모두 들어간 API를 지원
class PostViewSet(ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    #permission_classes = [AllowAny] #FIXME: 인증 적용

    def get_queryset(self):
        qs = super().get_queryset()
        qs = qs.filter(
            # "author" 필드가 현재 요청한 사용자 (self.request.user)와 동일한 값을 가지는 객체만 필터링
            Q(author=self.request.user) #본인이 작성한 글만 볼 수 있도록 함.
        )
        return qs
    
    def perform_create(self, serializer):
        serializer.save(author=self.request.user)
        return super().perform_create(serializer)

 

 

model 설계가 잘못된걸까요?

react python django docker

답변 1

0

이진석

안녕하세요.

제가 해빈 님 코드의 의도를 파악하긴 힘들지만

아래 코드에서, validated_data로 데이터를 넘기셨는 데
instance = Label.objects.create(**validated_data)

해당 시리얼라이저는 LabelSerializer이고, Meta 필드로서 author, label, images 필드가 지정되어있네요. 그래서 validated_data에 label이 있었던 것이구요.

Label모델 에는 label 필드가 없는 데, LabelSerializer에는 지정하셨구요. 그러니 Label() got an unexpected keyword argument 'label' 오류가 발생하신 듯 보입니다.

모델과 시리얼라이저 정의 간에 서로 맞지 않는 부분이 있는 듯 합니다.

필드 정의를 차근차근 정리해보시면 어떨까요?

화이팅입니다.

안녕하세요.

0

49

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

275

1

useEffect 훅에서 else 유무에 따른 결과

0

211

1

useAxios 훅의 dependency array 설정

0

245

1

useEffect에서 변수 업데이트 관련 질문

0

382

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

268

1

bootstrap4

0

471

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

365

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

574

3

useState는 필수일까요?

0

263

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

600

4

Django allauth를 사용한 소셜 로그인 시 에러

0

655

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

556

2

useLocalStorage() 함수 사용여부

0

229

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

449

1

리듀서의 의미 재확인

0

430

1

simple-jwt Refresh Token 사용 노하우

0

899

2

docker compose 를 통한 배포 관련 오류 문의

0

672

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

365

1

is_like_user

0

233

1

related_name 오류

0

275

1

re_path 오류

0

259

1

re_path url

0

251

1

No post matches the given query

0

661

2