이전 시간에는 도커 강의를 수강한 뒤 공부한 내용들에 대해 정리를 하는 시간을 가졌었다.
오늘부터 다시 마지막 프로젝트를 진행하기로 정하였고, 팀 프로젝트 노션 페이지에 적힌 일정을 진행하기로 정하였다.

오늘 정해진 일정으로는 DB 모델링과 Django admin 페이지를 커스터마이징을 해보기로 하였다.
이때 잠시 역할 분담이 살짝 바뀌었는데, 이전에 주어진 '여행 장소 기능', '맛집 장소 기능'이 겹쳐지는 부분이 있어서 다른 역할을 맡기로 하였다.
'댓글 및 좋아요 기능'을 맡은 팀원이 없었기에 이전에 역할을 맡은 '맛집 장소 기능'에서 '댓글 및 좋아요 기능' 구현을 하고자 역할이 변동되었다.
이전에 미리 작성해두었던 ERD를 참고하여 comment app에서 DB 모델링을 진행해주었다.
# comment/models.py
from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
from user.models import User
class PostType(models.Model):
typename = models.CharField("게시글 유형", max_length=100, unique=True)
def __str__(self):
return self.typename
class Comment(models.Model):
user = models.ForeignKey(User, verbose_name="사용자", on_delete=models.CASCADE)
posttype = models.ForeignKey(PostType, verbose_name="게시글 유형", on_delete=models.CASCADE)
post_id = models.BigIntegerField("게시글", null=False)
comment = models.TextField("댓글 내용")
rating = models.FloatField("평점", validators=[MinValueValidator(0.0), MaxValueValidator(5.0)])
created_at = models.DateTimeField("작성일", auto_now_add=True)
def __str__(self):
return f"{self.user.username} comments {self.posttype.typename}"
class Like(models.Model):
user = models.ForeignKey(User, verbose_name="사용자", on_delete=models.CASCADE)
posttype = models.ForeignKey(PostType, verbose_name="게시글 유형", on_delete=models.CASCADE)
post_id = models.BigIntegerField("게시글", null=False)
def __str__(self):
return f"{self.user.username} likes {self.posttype.typename}"
댓글, 좋아요, 게시글 유형 모델을 만들어주었고, 각 파트에 맞는 필드들을 설정해주었다.
이후 각 팀원별 맡은 역할에 대한 모델링을 끝내고 병합한 뒤, 팀장님의 주도 하에 고칠 부분이 있는지 확인을 해주었다.
makemigrations → migrate를 진행해준 뒤 admin 페이지에서 확인을 하고 테스트용 더미 데이터들을 생성하였다.

작성한 대로 잘 나오는 것을 볼 수 있었고, 이제 해당 admin 페이지를 커스터마이징 해보는 시간을 가졌다.
# comment/admin.py
from django.contrib import admin
from .models import Like, Comment, PostType
class LikeAdmin(admin.ModelAdmin):
list_display = ["id", "user", "posttype", "post_id"]
list_display_links = ["id", "post_id"]
list_filter = ["user", "posttype"]
search_fields = ["user__username", "posttype__typename", "post_id"]
class CommentAdmin(admin.ModelAdmin):
list_display = ["id", "user", "posttype", "post_id", "comment", "rating", "created_at"]
list_display_links = ["id", "post_id", "comment"]
list_filter = ["user", "posttype"]
search_fields = ["user__username", "posttype__typename", "post_id", "rating"]
class PostTypeAdmin(admin.ModelAdmin):
list_display = ["id", "typename"]
list_display_links = ["id", "typename"]
search_fields = ["typename"]
admin.site.register(Like, LikeAdmin)
admin.site.register(Comment, CommentAdmin)
admin.site.register(PostType, PostTypeAdmin)
admin 페이지에서 Comment, Like, PostType 모델을 볼 때, 해당 페이지에서 보여줄 부분 등에 대한 설정을 해준 뒤 해당 페이지에서 확인을 해보았다.



해당 사진을 보면 커스터마이징 해준 내용들에 대해 볼 수 있었다.
그리고 filter 기능과 search 기능을 통해 자신이 찾고 싶은 내용을 찾을 수 있도록 그에 대한 설정도 해주었다.

filter 기능을 통해 user 및 posttype에 대한 것을 따로 찾을 수 있도록 설정해주었다.

만약 확인하고자 하는 데이터의 내용이 많아지면 따로 검색을 하여 확인을 할 수 있도록 search 기능을 넣어주었다.
user, posttype, post_id, rating에 대해 검색을 하면 검색 내용에 부합하는 것을 찾을 수 있도록 만들어주었다.
이때, user와 posttype은 ForeignKey로 가져오기 때문에 해당 유저의 이름과 게시글 유형 이름에 맞는 값을 가져오기 위해 user__username, posttype__typename을 사용하여 참조된 다른 모델에서 해당 값을 찾아오도록 설정해주었다.
-
오늘은 DB 모델링 및 admin 페이지 커스터마이징을 진행하였다.
내일 아침에는 커스터마이징 한 admin 페이지를 점검해보고 피드백을 통해 수정을 할 예정이다.
이후 본격적인 프로젝트 일정에 맞춰 API 설계에 들어갈 것 같다.
주어진 기간 내에 API를 구현하고 테스트를 해보면서 맡은 역할을 완성해보고자 한다.
:P
'TIL 및 WIL > TIL (Today I Learned)' 카테고리의 다른 글
| [TIL] 2022.07.15 (MLT API 구현, My Little Trip(5)) (0) | 2022.07.15 |
|---|---|
| [TIL] 2022.07.14 (MLT API 구현, My Little Trip(4)) (0) | 2022.07.14 |
| [TIL] 2022.07.12 (Docker, 도커(2)) (0) | 2022.07.12 |
| [TIL] 2022.07.11 (Docker, 도커(1)) (0) | 2022.07.11 |
| [TIL] 2022.07.08 (내일배움캠프 마지막 프로젝트, My Little Trip(2)) (0) | 2022.07.08 |