티스토리 뷰

FK가 있는 경우 모두 customize 하여 생성하였습니다.

까다로워서, 여러 자료(블로그, stackoverflow 및 공식문서) 를 참고하였습니다.

 

모든 필드를 customize하여 seed를 정의하고

외래키의 경우 랜덤으로 부여합니다.

 

해당 파일은 만들고자 하는 앱 폴더 내에 management/commands 폴더를 생성한 뒤

각 폴더에 __init__.py 를 만들고 commands 안에 실행파일을 만들어줍니다.

 

실행은 python manage.py seed_reviews 로 진행합니다.

 

 

코드(FK 포함 모델)

한 명의 user 가 여러 개의 리뷰를 작성할 수 있고, 

한 개의 movie에 여러 개의 리뷰가 달릴 수 있으므로

 

Review 모델 안에

 

user = models.Foreignkey(Model명, 기타옵션)

movie = models.Foreignkey(Model명, 기타옵션)

 

으로 외래키가 설정된 상태입니다.

 

따라서 해당 필드에 random.choice(users) 로 유저 쿼리셋중 하나를 선택하게 합니다.

movie도 마찬가지로 진행합니다.

from django.core.management.base import BaseCommand
from django_seed import Seed
from movies.models import Review, Movie
from accounts.models import User
# from faker import Faker
import random


class Command(BaseCommand): 
    help = "이 커맨드를 통해 랜덤한 테스트 리뷰 데이터를 만듭니다."
    
    def add_arguments(self, parser): 
        parser.add_argument( 
            '--number', default=2, type=int, help="몇 개의 리뷰를 만드나") 
            
    def handle(self, *args, **options): 
        number = options.get('number') 
        seeder = Seed.seeder()
        # fake = Faker('ko_KR')

        users = User.objects.all()
        movies = Movie.objects.all()

        seeder.add_entity(Review, number, {
            "content": lambda x: seeder.faker.paragraph(nb_sentences=1),
            "rank": lambda x: random.randint(1, 5),
            "created_at": lambda x:  seeder.faker.date(),
            "updated_at": lambda x:  seeder.faker.date(),
            "user": lambda x:  random.choice(users),
            "movie": lambda x:  random.choice(movies),
        })

        seeder.execute()

        self.stdout.write(self.style.SUCCESS(f"{number}개의 리뷰가 작성되었습니다."))

 

참고자료

1. 장고 시드 공식문서

https://github.com/Brobin/django-seed

 

GitHub - Brobin/django-seed: Seed your Django database with fake data

:seedling: Seed your Django database with fake data - GitHub - Brobin/django-seed: Seed your Django database with fake data

github.com

2. faker 공식문서

https://github.com/joke2k/faker/

 

GitHub - joke2k/faker: Faker is a Python package that generates fake data for you.

Faker is a Python package that generates fake data for you. - GitHub - joke2k/faker: Faker is a Python package that generates fake data for you.

github.com

2-1. faker provider document(메서드 모음-공식)

https://faker.readthedocs.io/en/master/providers/faker.providers.date_time.html

 

faker.providers.date_time — Faker 10.0.0 documentation

© Copyright 2014, Daniele Faraglia Revision e2ee6af8.

faker.readthedocs.io

3. 블로그

https://ny0011.tistory.com/97

 

Django 앱 만들기 - 모델 테스트 데이터를 자동으로 만들기

Django 모델을 위한 테스트 데이터를 자동으로 만들어보자! 이걸 하기 전에 custom django-admin command를 만들어보자 docs.djangoproject.com/en/3.1/howto/custom-management-commands/ 아무 App 폴더에 manage..

ny0011.tistory.com

https://fenderist.tistory.com/373

 

[Python, Django] django-seed로 테스트데이터 자동생성

[Python, Django] django-seed로 테스트데이터 자동생성 - Django로 개발하면서 테스트를 위해서 데이터를 넣어야 하는 경우 일일이 다 넣기에는 귀찮고 번거로운 작업 - django-seed 모듈을 통하여 필드에

fenderist.tistory.com

https://fenderist.tistory.com/372

 

[Python, Django] Django manager로 실행할 명령어 만들기

[Python, Django] Django manager로 실행할 명령어 만들기 - django의 manager.py 파일을 통해서 서버도 실행하고 model과 DB도 매핑하는 명령어를 실행합니다. - 이런 명령어를 만드는 방법을 간단하게 소..

fenderist.tistory.com

 

댓글