首页 > 解决方案 > 将值附加到 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")

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)

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

例如,假设我创建了标题"Kolobok""Zolotaya Ribka". 接下来,我创建了客户"Vasya"。当我创建客户"Vasya"时,我将字段book指定为“Kolobok”。但随着时间的推移,我想将书附加"Zolotaya Ribka""Vasya"书上。

我怎么能做到这一点?

标签: pythondjangodatabase

解决方案


您可能需要一个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)

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

b1 = Book.objects.create(title='Kolobok', author='')
b2 = Book.objects.create(title='Zolotaya Ribka', author='')

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

c1 = Customer.objects.create(name='Vasya', surname='', age=73)

然后我们可以将这两本书链接b1到:b2c1

c1.books.add(b1, b2)

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


推荐阅读