将值附加到 Django 模型

Pyt*_*bie 2 python database django

我有 2 个数据库模型:

class Book(models.Model):
    title = models.CharField(max_length=150, null=False)
    author = models.CharField(max_length=150, null=False)
    date_pub = models.DateField(verbose_name="Date Published")
Run Code Online (Sandbox Code Playgroud)

class Customer(models.Model):
    name = models.CharField(max_length=25, null=False)
    surname = models.CharField(max_length=35, null=False)
    age = models.IntegerField(null=False)
    book = models.ForeignKey(to=Book, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

我的应用程序是最近创建的,所以我用来manage.py shell向这些模型插入数据。

例如,假设我创建了带有标题"Kolobok""Zolotaya Ribka". 接下来,我创建了 customer "Vasya"。当我创建 customer 时"Vasya",我将字段指向book“Kolobok”。但随着时间的推移,我想将 book 附加"Zolotaya Ribka""Vasya"'s books 。

我怎么能这样?

Wil*_*sem 5

你可能需要一个ManyToManyField[Django-doc]来代替。多对多字段意味着 aCustomer可以链接到零、一个或多个Books(因此这里意味着客户购买了零、一本或多本书),并且 aBook可以链接到零、一个或多个客户(所以一本书被零个、一个或多个客户购买)。

因此,我们可以通过引入一个字段来重塑它books

class Customer(models.Model):
    name = models.CharField(max_length=25, null=False)
    surname = models.CharField(max_length=35, null=False)
    age = models.IntegerField(null=False)
    books = models.ManyToManyField(Book)
Run Code Online (Sandbox Code Playgroud)

然后我们可以像您一样构建书籍和客户:

b1 = Book.objects.create(title='Kolobok', author='')
b2 = Book.objects.create(title='Zolotaya Ribka', author='')
Run Code Online (Sandbox Code Playgroud)

接下来我们可以创建一个客户:

c1 = Customer.objects.create(name='Vasya', surname='', age=73)
Run Code Online (Sandbox Code Playgroud)

然后我们就可以把两者联系起来的书b1,并b2c1

c1.books.add(b1, b2)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅有关多对多关系文档