Здравствуйте, помогите пожалуйста с заполнением Authors и Book по связи m2m. Реализовать нужно в кастомной менеджмент команде.
Вот модели:
Код который есть на данный момент (заполнение всего кроме m2m)
Вот модели:
Python:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
def __str__(self):
return self.name
class Publisher(models.Model):
name = models.CharField(max_length=300)
def __str__(self):
return self.name
class Book(models.Model):
name = models.CharField(max_length=300)
pages = models.IntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
rating = models.FloatField()
authors = models.ManyToManyField(Author, verbose_name='book authors')
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, verbose_name='book publisher')
pubdate = models.DateField('publication date')
def __str__(self):
return self.name
class Store(models.Model):
name = models.CharField(max_length=300)
books = models.ManyToManyField(Book, verbose_name='store books')
def __str__(self):
return self.name
Код который есть на данный момент (заполнение всего кроме m2m)
Python:
class Command(BaseCommand):
help = 'This command is for inserting Author, Book, Publisher, Store into database.' \
'Insert 10, Authors, 10 Publishers, 200 Books, 10 Stores.'
def handle(self, *args, **kwargs):
# Author.objects.all().delete()
# Publisher.objects.all().delete()
# Book.objects.all().delete()
# Store.objects.all().delete()
# create 10 authors
authors = [Author(name=fake.name(), age=random.randint(18, 85)) for _ in range(10)]
Author.objects.bulk_create(authors)
# create 10 publishers
publishers = [Publisher(name=fake.company()) for _ in range(10)]
Publisher.objects.bulk_create(publishers)
# create 20 books for every publishers
for publisher in Publisher.objects.all():
for _ in range(20):
books = [Book(name=fake.sentence(nb_words=3), pages=random.randint(25, 300),
price=round(random.uniform(15, 300), 1), rating=random.randint(1, 10),
pubdate=timezone.now(), publisher=publisher)]
Book.objects.bulk_create(books)
# create 10 stores and insert 10 books in every store
books = list(Book.objects.all())
for _ in range(10):
temp_books = [books.pop(0) for _ in range(10)]
store = Store.objects.create(name=fake.company())
store.books.set(temp_books)
store.save()