📌 장고 게시판을 구현하기 위해 django-seed를 이용하여 임의의 데이터를 만들어보았다. 하지만 무작위 데이터를 생성하기 때문에 이번에는 코드를 작성하여 내가 원하는 데이터를 생성해보려고 한다.
➤ 둘러보기 : Django 게시판
$ pip3 install django-seed
$ pip3 install psycopg2
$ pip3 freeze > requirements.txt
✔️ 먼저 데이터를 생성할 수 있게 도와주는 seed를 설치하자.
📌 무작위 데이터 생성 방법
$ python3 manage.py seed shortener --number=30
✔️ 코드 작성 없이 seed만 사용하여 app에 작성된 모델의 데이터를 무작위로 생성하는 방법은 위의 커맨드를 실행시키면 된다.
✔️ 하지만 원하는 데이터를 만들기 위해 코드를 작성하여 커스텀 커맨드를 만들어보겠다.
✔️ 코드를 작성하기 위한 커맨드 파일을 생성하자.
- ango-admin으로 생성한 app 하위에
management>commands
폴더를 생성- 코드를 작성할
seed_data.py
파일 생성__init__.py
파일 생성
📌 __init__.py 파일의 역할
__init__.py
파일은 해당 디렉토리가 패키지의 일부임을 알려주는 역할을 한다. 만약 game, sound, graphic 등 패키지에 포함된 디렉토리에__init__.py
파일이 없다면 패키지로 인식하지 않는다.또한 패키지와 관련된 설정이나 초기화 코드를 포함할 수 있다.
from django.core.management.base import BaseCommand class Command(BaseCommand): help = 'Create data of user and pay plan' def add_arguments(self, parser): parser.add_argument('-n', '--> number', required=True, type=int)
✔️ 커맨드에 생성할 데이터 수를 입력하기 위해 옵션 --number
추가하였다.
$ python3 manage.py seed_data --number 50
or
$ python3 manage.py seed_data -n 50
✔️ 이는 커맨드 실행 시 위와 같이 사용이 된다.
import random from faker import Faker from django_seed import Seed from django.db import transaction from django.core.management.base import BaseCommand from shortener.models import PayPlan, Users class Command(BaseCommand): ... def handle(self, *args, **options): faker = Faker() number = options['number'] price = lambda x: random.randint(000000, 999999) with transaction.atomic(): payplan_seeder = Seed.seeder() payplan_seeder.add_entity(PayPlan, number, { 'price': price, }) payplan_seeder.execute() payplan = PayPlan.objects.all() user_seeder = Seed.seeder() user_seeder.add_entity(Users, number, { 'pay_plan': lambda x: random.choice(payplan), 'password': lambda x: faker.password(), }) user_seeder.execute() self.stdout.write(self.style.SUCCESS(f"{number} users created!"))
✔️ handle()함수에 실행 소스를 작성하면 커맨드를 사용할 수 있다.
python3 manage.py seed_data -n 50
✔️ 위의 명령어로 50개의 데이터를 생성
✔️ 가격은 내가 지정한 범위 안의 정수가 랜덤으로 데이터 생성
✔️ 비밀번호는 faker를 사용한 랜덤 비밀번호 데이터 생성