【发布时间】:2021-06-20 20:23:56
【问题描述】:
我正在学习 Django,对我来说有点困难,所以我在使用 Fields M2M、OTO、FK 时遇到了一些问题,我被卡住了,我正在尝试填写数据库(SQL),一切似乎都正常,但是有一个中间字段
authors = models.ManyToManyField(Author)
book_authors这个表是空的,阅读文档,没有帮助:p
models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
class Publisher(models.Model):
name = models.CharField(max_length=300)
class Book(models.Model):
name = models.CharField(max_length=300)
pages = models.IntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
rating = models.FloatField()
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
pubdate = models.DateField('date published')
class Store(models.Model):
name = models.CharField(max_length=300)
books = models.ManyToManyField(Book)
admin.py
from django.contrib import admin
from annotate_aggregate.models import Author, Publisher, Store, Book
admin.site.register(Author)
admin.site.register(Publisher)
admin.site.register(Book)
admin.site.register(Store)
管理/命令/seed.py
import random
from django.utils import timezone
from annotate_aggregate.models import Author, Book, Store, Publisher
from django.core.management.base import BaseCommand
from faker import Faker
fake = Faker()
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('arg', type=int)
def handle(self, *args, **options):
num = options['arg']
for _ in range(int(num)):
Author.objects.create(name=fake.name(),
age=random.randint(20, 70))
for _ in range(int(num)):
Publisher.objects.create(name=fake.company())
for publisher in Publisher.objects.all():
for _ in range(int(num)):
books = [Book(
name=fake.sentence(),
price=random.uniform(29.99, 225.9),
pages=random.randint(50, 300),
rating=round(random.uniform(1, 5), 2),
pubdate=timezone.now(),
publisher=publisher)]
Book.objects.bulk_create(books)
books = Book.objects.all()
for _ in range(int(num)):
store = Store.objects.create(name=fake.company())
store.books.set(books)
store.save()
【问题讨论】:
-
您永远不会将作者添加到您附加到出版商的书中。循环浏览书籍并为每本书添加一个随机作者。
-
@AMG 是的,我明白这一点,但我不知道它是如何在我的代码中修复的。