Python & Django
[django] command 만들기 OneToOneField
_29
2021. 9. 8. 19:12
OneToOneField 에 대한 커맨드를 어떻게 만들지 고민하다가 과제 코드를 보고 확인함.
## favs/models.py
from django.db import models
from core.models import CoreModel
class FavList(CoreModel):
""" Favourite List """
created_by = models.OneToOneField("users.User", on_delete=models.CASCADE)
books = models.ManyToManyField("books.Book", related_name="fav_lists")
movies = models.ManyToManyField("movies.Movie", related_name="fav_lists")
def __str__(self):
return f"{self.created_by}'s Fav List'"
## favs/management/commands/seed_favs.py
from django.core.management.base import BaseCommand
from favs.models import FavList
from users.models import User
from movies.models import Movie
from books.models import Book
class Command(BaseCommand):
help = "This command seeds lists"
def add_arguments(self, parser):
parser.add_argument(
"--total",
help="How many lists do you want to create?",
default=10)
def handle(self, *args, **options):
total = int(options.get('total'))
users = User.objects.all()[:total]
movies = Movie.objects.all()
books = Book.objects.all()
for user in users:
fav_list = FavList.objects.create(
created_by=user,
)
fav_list.movies.set(choices(movies))
fav_list.books.set(choices(books))
self.stdout.write(self.style.SUCCESS(f'{total} lists created!'))