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!'))