반응형
스파르타 코딩클럽 내일배움캠프 AI 웹개발자양성과정 3회차
2022.10.28. 41일차 - TIL
1. Django Time Attack
1) 문제
- 프로젝트 폴더를 생성하고 가상 환경을 생성 및 실행 해주세요
- djangorestframework와 djangorestframework-simplejwt 패키지를 설치하고, requirements.txt에 설치된 패키지를 저장해주세요
- django_advance 라는 이름으로 django 프로젝트를 생성해주세요
- github에 새로운 레포지토리를 생성해주세요
- ..gitignore 설정 후 django_advance 프로젝트를 푸시해주세요
- settings.py에 jwt토큰을 사용할 수 있도록 설정해주세요
- urls.py에 jwt 로그인 url을 지정해주세요
- article 앱을 만들고 settings.py에 등록해주세요
- article의 models.py에 Article 모델을 생성해주세요
- author라는 필드를 foreignkey로 지정하고, user model을 참조하도록 해주세요
- title이라는 필드를 charfield로 지정해주세요
- content라는 필드를 textfield로 지정해주세요 - article에 serializers.py 파일에 ModelSerializer를 사용해 시리얼라이저를 생성하고 Article 모델을 지정해주세요
- article 앱의 views.py에 APIView를 사용해 get/post 요청을 받을 수 있는 ArticleView 클래스를 만들어주세요
- 프로젝트 urls에 /api/article/ 경로로 접속했을 때 article의 urls를 호출하도록 설정하고, article의 urls.py에 ''경로로 접속했을 때 ArticleView를 호출하도록 설정해주세요
- ArticleView에 post 요청을 받으면 serializer를 사용해 로그인한 사용자를 author로 지정하고 게시글을 생성할 수 있도록 해주세요
- ArticleView에 get 요청을 받으면 serializer를 사용해 모든 게시글 목록을 리턴하도록 해주세요
- postman으로 테스트를 진행해주세요(로그인, 게시글 작성, 게시글 조회)
- 테스트 결과를 확인하고 작업 내용들을 메인 브랜치에 푸시해주세요
2) 에러 상황
계속 게시글 생성이 되지 않았다. 모델에서 사용한 함수를 나혼자 크게 착각했다.
class Article(models.Model):
...
author = models.ForeignKey(get_user_model(), verbose_name="작성자", on_delete=models.CASCADE)
...
나는 저렇게 모델의 필드가 정의되면 자동으로 현재 사용자가 작성자로 값이 지정되는 줄 알았다. 저기서 첫번째 인자는 '연결대상모델' 이다. 다시말해 외래키가 가리키는 참조 모델을 의미한다. 따라서 postman으로 title과 content만 보내봤자 지정해 놓은 author 필드가 비어있기 때문에 생성이 불가했다.
json을 data로 바꾸어주는 serializers의 create fields를 id, title, content만 하면 생성이 되는 것이다.
반응형