09.-4 더미 데이터 추가

조재훈·2022년 7월 22일
0

Clone_Airbnb

목록 보기
21/31
post-thumbnail

1) seed_reviews

Review의 항목들

reviews - management - __init__.py
reviews - management - commands -
__init__.py

reviews - management - commands - seed_reviews.py

import random
from django.core.management.base import BaseCommand
from django_seed import Seed
from reviews import models as models_review
from users import models as models_user
from rooms import models as models_room

class Command(BaseCommand):
    
    help = "This command creates reviews"
    
    def add_arguments(self, parser):
        parser.add_argument(
            "--number",
            default=2,
            type=int,
            help="How many reviews do you want to create?",
        )
        
    def handle(self, *args, **options):
        number = options.get("number")
        seeder = Seed.seeder()
        all_users = models_user.User.objects.all()
        all_rooms = models_room.Room.objects.all()
        seeder.add_entity(
            models_review.Review,
            number,
            {
                "user": lambda x: random.choice(all_users),
                "room": lambda x: random.choice(all_rooms),
                "cleanliness": lambda x: random.randint(1, 5),
                "accuracy": lambda x: random.randint(1, 5),
                "communication": lambda x: random.randint(1, 5),
                "location": lambda x: random.randint(1, 5),
                "check_in": lambda x: random.randint(1, 5),
                "value": lambda x: random.randint(1, 5),                
            },
        )
        seeder.execute()
        self.stdout.write(self.style.SUCCESS(f"{number} reviews created!"))



잘 된당. 근데 Room을 보면 평균 점수가 좀 이상하다.

저거는 room admin에서 return을 round씌우면 된다.

return round(all_ratings / len(all_reviews), 2)

2) seed_lists

lists - management - __init__.py
lists - management - commands -
__init__.py

lists - management - commands - seed_lists.py

import random
from django.core.management.base import BaseCommand
from django.contrib.admin.utils import flatten
from django_seed import Seed
from lists import models as models_list
from users import models as models_user
from rooms import models as models_room


class Command(BaseCommand):

    help = "This command creates lists"

    def add_arguments(self, parser):
        parser.add_argument(
            "--number",
            default=2,
            type=int,
            help="How many lists do you want to create?",
        )

    def handle(self, *args, **options):
        number = options.get("number")
        seeder = Seed.seeder()
        all_users = models_user.User.objects.all()
        seeder.add_entity(
            models_list.List,
            number,
            {
                "user": lambda x: random.choice(all_users),
            },
        )
        created = seeder.execute()
        cleaned = flatten(list(created.values()))
        rooms = models_room.Room.objects.all()
        for pk in cleaned:
            list_model = models_list.List.objects.get(pk=pk)
            to_add = rooms[random.randint(0, 5) : random.randint(6, 30)]
            list_model.rooms.add(*to_add)
        self.stdout.write(self.style.SUCCESS(f"{number} lists created!"))



3) seed_reservations

이때는 비슷하게 하되 주의할 점이 check_out 날짜가 check_in보다 이전이어서는 안된다.

import random
from datetime import datetime, timedelta
from django.core.management.base import BaseCommand
from django_seed import Seed
from reservations import models as models_reservation
from rooms import models as models_room
from users import models as models_user


class Command(BaseCommand):

    help = "This command creates many reservations"

    def add_arguments(self, parser):
        parser.add_argument(
            "--number",
            default=2,
            type=int,
            help="How many reservations do you want to create?",
        )

    def handle(self, *args, **options):
        number = options.get("number")
        seeder = Seed.seeder()
        all_guests = models_user.User.objects.all()
        all_rooms = models_room.Room.objects.all()
        seeder.add_entity(
            models_reservation.Reservation,
            number,
            {
                "status": lambda x: random.choice(["pending", "confirmed", "canceled"]),
                "guest": lambda x: random.choice(all_guests),
                "room": lambda x: random.choice(all_rooms),
                "check_in": lambda x: datetime.now()
                - timedelta(days=random.randint(-2, 2)),
                "check_out": lambda x: datetime.now()
                + timedelta(days=random.randint(3, 25)),
            },
        )
        seeder.execute()
        self.stdout.write(self.style.SUCCESS(f"{number} reservations created!"))

그리고 짜잘한 수정이긴 한데 reservations - models.py 에서 메서드 하나를 수정한다.

    def in_progress(self):
        now = timezone.now().date()
        return now >= self.check_in and now <= self.check_out

예이

profile
맨땅에 헤딩. 인생은 실전.

0개의 댓글