일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- TypeScript
- git
- async
- flask
- S3
- AWS
- RDS
- SAA
- lambda
- 파이썬
- 카톡
- MongoDB
- merge
- EC2
- react
- docker
- Props
- 튜플
- node
- SSA
- socket io
- Vue
- pandas
- dict
- Class
- crud
- wetube
- NeXT
- 채팅
- 중급파이썬
- Today
- Total
초보 개발자
django-seed 본문
장고로 다양한 모델을 만들 때,
일일이 데이터를 만들면 시간이 오래걸릴 것이다.
하지만 django-seed를 사용한다면 이러한 문제를 해결해준다.
먼저 django-seed를 다운로드 받아야한다.
pipenv install django-seed
그리고 커맨더를 만들어서 사용을 해야 하는데,
아무 app에 management라는 폴더를 하나 만들고 그 안에 __init__.py와 commands폴더를 만들자
그리고 commands의 폴더안에 또 __init__.py를 만들고 seed_facilities.py를 만들자
전체전인 코드를 살펴보면 먼저 seed_facilities라는 명령어를 사용하기 위해선
Command라는 클래스를 하나 만들어주어야 한다. 그 클래스는 BaseCommand를 상속하고,
그 안에는 여러 메서드가 올 수 있지만 우리가 사용할 것은 handle이다. handle 메서드가 없다면 Command 클래스를 만들어도 소용이 없다.
우리가 만들고 싶은 facilities는 총 6개이다. 따라서 반복문을 통해서 만약 저 개개의 facilities가 데이터베이스에 존재하지 않는다면 생성하는 방향으로 해주었다.
self.stdout.write를하면 콘솔에 출력이 되고, self.style.SUCCESS를 적어주면 초록색 글씨로 출력이 된다.
python manage.py seed_facilities를 입력하면 잘 생성이 된 것을 확인할 수 있다.
이렇게 필드가 하나만 존재하는 것은 간단하게 만들어지지만, 만약 필드가 여러개 존재한다면 어떻게 할까?
바로 여기서 django-seed를 사용할 수 있다.
먼저 django-seed를 사용하려면 pip install psycopg2-binary를 다운로드 받아주자.
그리고 아래와 같은 코드를 작성해주자
여기서 추가된 것은 add_arguments이다. 이걸 사용하면 우리가 옵션을 줄 수 있다.
예를들어 python manage.py --number 50 이라고 작성하기 위해서는 parser.add_argument의 매개변수안에 적어주저어야 한다. 그렇게 적히면 handle의 options에 number에 50이라는 값이 담겨오고 우리는 이걸 사용할 수 있다.
아이디의 admin과 staff권한을 주지 않기위해서 'is_staff' :False로, 'is_superuser':False로 주었다. 이렇게하면 신기하게 모든 필드에 적절한 값이 들어가 잘 생성이 되는 것을 확인할 수 있다.
이걸 똑같이 Room model에도 적용시켜줬더니, foreign key 인 것은 null이 들어올 수 없다면서 오류가난다.
lamda함수를 사용하여 user를 불러와 랜덤으로 넣어주는 역할을 시켰다.
room_type또한 foreign key이므로 동일하게 해주었다. 나머지는 사실 오류는 나지 않지만,
음수가 나오거나 터무니 없는 숫자들이 나오기 때문에 조정을 해주었다.
그리고 name에 보이는 faker는 seeder가 제공해주는 기능인데, emal()을 적으면 email을 만들어주고 address()를 적으면 address를 반환해주기에 적절한 값이 들어온다.
단 여기서 포토 사진도 넣어주어야 한다.
그러기 위해선 일단 seeder.execute()를 실행한 뒤에 추가작업을 해줘야 하는 부분이 있다.
먼저 seeder.execute()는 생성된 모델들을 반환한다. values()를 사용하면 dict_value라는 형식으로 모델들의 id값이 들어온다. 이를 리스트형식으로 만들면 0번째 인덱스에 그 배열이 담겨있다. 그 배열을 받아 for문을 돌린다.
각 id에 해당하는 room을 찾고, caption에는 faker의 sentence를 사용하고, 사진은 4개부터 8개까지 랜덤으로 들어가게 생성해준다. 다만 여기서 file은 미리 uploads/room_photos에 31개를 넣어두고 랜덤으로 뽑히도록 하였다.
이렇게하면 사진까지 잘 생셩이 된 것을 확인할 수 있다.
근데 여기서 드는 의문점이 사진을 클릭했을 때 다운로드가 받아진다..? 이건 잘 모르겠다.
'Python > airbnb 클론' 카테고리의 다른 글
extend base.html, include (0) | 2022.02.05 |
---|---|
url, views (0) | 2022.02.05 |
raw_ids ,inline Admin, save() (0) | 2022.01.26 |
photo model (0) | 2022.01.26 |
queryset , manytomany (0) | 2022.01.25 |