- ForeignKey를 통해 참조. writer는 Django의 User model에 포함된 값만 저장될 수 있게 제약을 설정
- user은 Django에서 제공해주는 model,즉 writer는 user을 참조한다. 이 user는 무결성 참조조건에 의해 존재하는 값 혹은 null 값 만 써야한다
- 이 user는 django.contrib.auth.models에서 import한 객체로 사용자의 정보
- 참조하는 user가 삭제될 때 게시글을 남기거나 삭제하는 옵션 = on_delete, CASCADE = 삭제
- migartion error
- 이미 존재하는 model에 새 속성 추가시 해당 속성에 대한 값을 어떻게 할 것인가?
- 자동으로 지정한 값이나 null값을 자동으로 넣어준다
- migrate를 종료하고, 사용자가 수동으로 넣어준다
- 1번 옵션을 사용하여 사용자의 id의 값을 넣어주게 한다
- 위와 같이 열쇠모양 (기본키)에 해당하는 값을 넣어줘야 하며, 현재 존재하는 값, 즉 이번 실습에서는 존재하는 user의 id값을 넣어줘야한다
- 새 migration file이 생성
- migrate 적용시 DB에 추가된다
- showmigrations : 지금까지 적용된 migration을 확인할 수 있다. 이때 x표시된 사항은 migration이 완료된 사항이다
- 실행 결과
- 함수 위에 @~ 표시로 작성하여 기능을 추가할 수 있다
- login_requried() 기능은 login할 시 밑에 함수가 실행된다
- login 상태가 아니라면, 지정한 url로 가게 설정
게시물 작성자와 login user를 비교한다
login한 user의 정보는 request.user에 담겨있다
- 작성자와 user를 비교하여 작성자만 삭제 가능하게 한다
- 현재 작성자 id는 1이므로 다른 id의 user는 삭제가 불가능하다
- front에서 처리하는 방법 : form에 writer를 추가
- 실행 결과
- update도 같은 template form을 사용하므로 동일하다
- login한 user를 작성자로 설정하게 수정한다
- form 수정
- exclude를 통해 form에서 writer를 제외시킨다. 즉, 입력받지 않는다. exclude로 입력받지 않은 값을 지정하지 않으면 is_valid에서 null값에 대한 error가 발생할 수 있다
- views 수정
- 작성자를 user로 설정한다. 이 설정을 안하면 writer를 form에서 exclude했기에 유효성 검사는 통과하지만 null값이 들어간다
post가 존재하면 내용 출력, user가 작성자라면 버튼 출력
- 결과
- 작성자라면
- 작성자가 아니라면
- error 해결 : objects.filter를 사용하면 list로 반환되므로, for문을 통해 추출해야한다. 따라서 하나의 Data를 출력하려면 get 사용
- migrate를 취소나 되돌리고 싶을때는 원하는 App 이름 + 번호로 되돌릴 수 있다
- zero를 사용하면 table 자체가 삭제된다