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)
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!"))
이때는 비슷하게 하되 주의할 점이 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
예이