1. 모델 설계
1) User: Django에서 지원하는 AbstractBaseUser를 상속
- AbstractBaseUser: password, last_login, is_active 필드 제공. django가 제공해주는 필드를 이용하면서 사용자 정의 field 추가를 위해 사용. (AbstractUser보다 제공 필드가 적어 더 유연성이 있다)
- login id로 username이 아닌 nickname 사용. (USERNAME_FIELD='nickname'으로 변경. 애초에 username을 nickname 처럼 받아써도 되겠으나 헷갈리지않도록 구분했다.)
- 공식문서: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#a-full-example
- is_active, is_admin 필드는 django user 모델의 필수 필드.
- nickname: 처음 계정 생성 시 쓰는 userid(중복 불가값으로 unique)
- username: user의 이름
- is_professional: professional 계정인지 확인. default 값 False.
- is_private: 비공개 계정인지 확인. default 값 False.
- phone_num: 핸드폰 번호
- email: 이메일
- password: 비밀번호
권한 설정
- is_active: 활성 계정인지 확인. default 값 True.
- is_staff: admin 접근 가능 계정인지 확인. default 값 False.
- is_superuser: superuser인지 확인. default 값 False.
- is_admin: admin인지 확인. default 값 False.
2) Profile: User 모델과 1:1로 연결해 사용자 세부 정보를 저장
- id: PK
- user_id: FK(User)
- image: 프로필 이미지
- info: 소개글
- website: 웹사이트
- profile_name: 프로필 설정 이름
- gender: 성
- birth_date: 생일
3) Post: User 모델과 1:N의 관계.
- id: PK
- content: 내용
- created_time: 작성 시간
- updated_time: 수정 시간
- comment_available: 댓글 작성 가능한지. default 값 True.
- author_id: FK(User)
- location: 위치
4) Comment: User, Post와 1:N의 관계
- id: PK
- author_id: FK. 댓글 작성자 (erd에 author 잘못들어감)
- post_id: FK(Post)
- created_time: 작성 시간
- updated_time: 수정 시간
5) File: Post 모델과 1:N의 관계
- id: PK
- file: image/vedio
- post_id: FK(Post)
6) Like: User, Post와 1:N의 관계
- id: PK
- post_id: FK(Post)
- user_id: FK(User)
7) Follow: Follower:Follwing = N:M의 관계
- id: PK
- follower: FK
- following: FK
2. ORM 테스트
1) Post 객체 조회, Follow 객체 조회
- related_name 이용해서 likes(해당 user의 Like) , post_likes(해당 post에 대한 Like) 조회
- related_name 이용해서 user의 follwers(user를 follow하는 관계), followings(user가 follow하는 관계) 조회
2) Filter 사용
※ get()과 filter()의 차이
- get()은 쿼리에 맞는 객체 하나만 반환. 쿼리에 맞는 결과가 없을 시 DoesNotExist 에러가 발생. 여러 객체가 조회되면 MultipleObjectsReturned 에러가 발생.
- 쿼리에 맞는 결과가 없다면
- 여러 객체가 조회된다면
- filter()는 새로운 쿼리셋 생성 후, 필터 조건에 부합하는 객체들을 넣은 후 리턴. (필터 조건에 부합하는 객체가 없다면 빈 쿼리셋 반환)
- 여러 객체 조회 시
- 빈 객체 조회 시
'SERVER > Django' 카테고리의 다른 글
[Django] 인스타그램 클론 코딩 Serializer 적용 및 API TEST하기 (0) | 2021.11.21 |
---|---|
[Django] Django 앱 작성하기 tutorial (part1~part4) (0) | 2021.09.23 |
[Django] Django 앱 작성하기 tutorial (part1) (0) | 2021.09.23 |