현제의 현재이야기
[KLAE] 0105 개발일지 본문
구성파악의 치명적 오류 발견.
알고보니 Userplant(유저가 등록한 식물) 별로 일지가 나누어지는 형식이었다. 게다가
아까 작성된 일지를 기반으로 글 작성시 식물 이름이 그대로 넘어와야 한다. + n일차도 만들어야한다.
plants/views.py
#마이페이지 사이드바 - 유저에 맞는(생성한) 식물 리스트
@api_view(['GET'])
@authentication_classes([SessionAuthentication,BasicAuthentication])
@permission_classes([IsAuthenticated])
def get_user_plants(request):
plants = UserPlant.objects.filter(user=request.user.id).order_by('-created_at')
serializer = UserPlantsSidebar(plants, many=True)
return Response(serializer.data)
- 사이드바 구현. 유저가 생성한 식물들을 모아준다.
plants/serializers.py
#사이드바
class UserPlantsSidebar(serializers.ModelSerializer):
class Meta:
model = UserPlant
fields = ['id', 'name']
read_only_fields = ['id']
- 유저가 생성한 식문, userplant의 Id값과 이름을 넘겨준다.
accounts/models.py
class Post(models.Model):
user_plant = models.IntegerField(null=True)
ndate = models.IntegerField(default=0, null=True, blank=True)
- 모델에 user_plant를 추가하여 post에 userplant가 저장되게 함
- 또한 n일차를 반환하기 위해 ndate 필드를 생성
accounts/views.py
#식물별 작성된 일지 모아주기
@api_view(['GET'])
@authentication_classes([SessionAuthentication,BasicAuthentication])
@permission_classes([IsAuthenticated])
def get_userplant_post(request, user_plant_id):
posts = Post.objects.filter(user_plant=user_plant_id).order_by('-created_at')
userplant = UserPlant.objects.get(pk=user_plant_id)
date = userplant.created_at.replace(tzinfo=None)
now = datetime.now().replace(tzinfo=None)
posts.ndate = (now - date).days + 1
serializer = PageSerializer(posts, many=True)
return Response(serializer.data)
- 사이드바가 먼저 불려오면, 거기에 맞는 user_plant_id를 넣어줘서 그에 맞는 목록(한 식물의 일지들)을 불러온다.
- 그래서 userplant를 불러오고 그 userplant의 생성된 날짜와 현재 시간을 계산하여 post.ndate에 담는다.
#게시물 업로드
@api_view(['POST'])
@authentication_classes([SessionAuthentication, BasicAuthentication])
@permission_classes([IsAuthenticated])
def post_one_post(request, user_plant_id):
serializer = PostWritePutSerializer(data=request.data)
if serializer.is_valid():
serializer.save(writer = request.user, user_plant=user_plant_id) #1 = request.data
return Response(status = status.HTTP_201_CREATED)
return Response(status = status.HTTP_400_BAD_REQUEST)
- 포스트 할 때, url을 통해서 user_plant_id를 통해서 해당 게시글의 user_plant의 값을 저장하거나, request의 한 변수를 통해서 담긴 자료를 통해서 넣을 수 있다. 이건 향후 프론트와 상의 필요
#한 게시물 조회
@api_view(['GET'])
@authentication_classes([SessionAuthentication, BasicAuthentication])
@permission_classes([IsAuthenticated])
def get_one_post(request, pk):
try:
post = Post.objects.get(pk=pk)
comments = Comment.objects.filter(post__id = pk)
userplant = UserPlant.objects.get(pk=post.user_plant)
post.comment_cnt = comments.count()
date = userplant.created_at.replace(tzinfo=None)
now = datetime.now().replace(tzinfo=None)
post.ndate = (now - date).days + 1
post.save(update_fields=['comment_cnt', 'ndate'])
serializer = GetSerializer(post)
return Response(serializer.data)
except Post.DoesNotExist:
return Response(status = status.HTTP_404_NOT_FOUND)
- get할 때 post에 담긴 user_plant를 통해서 해당 userplant를 불러어고, 여기서 date를 계산한다. 또한, 값도 저장
- 글도 잘 담기고, ndate도 정상적으로 해결된다.
- 어디에 ndate를 담아야 하는지 고민이 많았는데 매번 검색을 해야한다는 단점이 있지만(향후 개선) 그래도 해결돼서 기분이 좋다.
- 프론트와 어떻게 통신해야될지 고민을 많이했는데, 역시 소통이 중요하다.
| 트러블 슈팅
- 나도 aws서버를 이용해서 데이터베이스를 사용하다보니깐 저런 오류가 났다. .replace(tzinfo=None)를 추가해서 해결완료
'DRF > KLAE' 카테고리의 다른 글
[KLAE] 0107 개발일지 (0) | 2023.01.07 |
---|---|
[KLAE] 0106 개발일지 (0) | 2023.01.06 |
[KLAE] 0103 개발일지 (0) | 2023.01.04 |
[KLAE] 0102 개발일지 (1) | 2023.01.02 |
[KLAE] 1230 개발일지 (0) | 2022.12.30 |
Comments