(수정)한 포스팅에 사진 여러장을 업로드하려고 수정해봤습니다
하나의 포스팅에 여러 이미지들을 업로드하는 코드를 선생님 강좌를 보면서 나름대로 수정해봤는데 코드가 많이 엉킨 것 같습니다.
우선 코드부터 보여드리자면
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 instancemainfunc/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 설계가 잘못된걸까요?
답변 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





