Today I Learned | 7월 20일

12038 단어 TILTIL

오늘 뭐했지 🎀

1 Code Kata day2
2 Django C.R.U.D (2) 복습, 추가과제
3 git 명령어

🦠 Code Kata day2

Code Kata day 2 링크

🦠 Django C.R.U.D (2) 복습

Django C.R.U.D (2) 링크

필수과제 해결 후 복습할 겸 가벼운 마음으로 추가과제 도전 !

과제

  1. 위 테이블 구성을 토대로 models.py 를 작성해주세요.
  2. 등록된 배우 목록을 리턴해주는 GET 메소드를 구현해주세요.
    • 배우의 이름, 성, 그리고 출연한 영화 제목 목록
  3. 등록된 영화 목록을 리턴해주는 GET 메소드를 구현해주세요.
    • 영화의 제목, 상영시간, 출연한 배우 목록 (이름만)

수행내용

Django C.R.U.D (2) Assignment 링크

1. 배운 내용을 토대로 models.py 작성 후 migrate

class Actor(models.Model) :
        first_name = models.CharField(max_length=45)
        last_name = models.CharField(max_length=45)
        date_of_birth = models.DateField()
        movie = models.ManyToManyField('Movie', related_name='actor')

class Movie(models.Model) :
	title = models.CharField(max_length=45)
	release_date = models.DateField()
	running_time = models.IntegerField()

보통 테이블간의 상하관계를 따져 Actor <- Movie 방향으로 참조하는 것 같아서 반대 방향으로 ( Movie <- Actor ) 참조해봤다. (엄청 헷갈림 ㅎㅎ)

새로 등장한 내용
DateField(), ManyToManyField()

역참조 데이터 호출 ( Movie -> Actor )

  • movie.actor_set.al()
  • related_name 설정

2. views.py작성

class ActorView(View) :
	def get(self, request) :
		actors = Actor.objects.all()
		results = []
		for actor in actors :
			movies = actor.movie.all() <------
			movie_list = [movie.title for movie in movies]
			results.append(
				{'first_name' : actor.first_name,
				'last_name' : actor.last_name,
				'movie' : movie_list
				}
				)
		return JsonResponse({'results' : results}, status = 200)
        
  class MovieView(View) :
	def get(self, request) :
		movies = Movie.objects.all()
		results = []
		for movie in movies :
			actors = movie.actor.all() <------
			actor_list = [actor.first_name for actor in actors]
			results.append(
				{'title' : movie.title,
				'running_time' : movie.running_time,
				'actors' : actor_list
				}
				)
		return JsonResponse({'results' : results}, status = 200)

놀랍도록 필수과제와 비슷한 코드 등장.
조금 다른 점은 상호관계의 테이블 간 연결된 데이터를 처리하는 방법이다.

RelatedManager
ForeignKey 혹은 ManyToManyField 필드를 갖는 테이블에서 사용한다.

3. urlconf 수정

#movies.urls.py
urlpatterns = [

	path('/actors', ActorView.as_view()), 
	path('', MovieView.as_view()),
]
#project.directory.urls.py
urlpatterns = [

	path('', include('movies.urls'))
]

🦠 git 명령어

git clean
git이 추적하지 않는 'unstage' 상태의 파일을 제거함.

사소한 수정사항이 있어서 계속 branch를 넘나들다보니 stage 상태의 파일이 섞이는 일이 발생.
git이 자꾸 나를 checkout 시켜주지않아서 추적하지 않는 파일을 삭제. .하자 branch를 넘나들때마다 파일이 생겼다 사라졌다를 반복하는 현상이 발생했다 .. 그때서야 비로소 내가 무슨 일을 저질렀는지 감이 팍 ~ 왔다 ^^ 모든 브랜치를 main 과 합쳐서 해결했다.
git은 HEAD branch가 추적하지 않는 파일을 유지함으로서 파일이 없었다 있었다 하는 현상을 막아주고 있었다.. 다시는 이런 일이 발생하지않도록 작업할 때마다 해당 branch를 유지할 것 .

좋은 웹페이지 즐겨찾기