目录
例如:书,出版社,的关系为 一对多,一个出版社 多个书。如下创建;
多表添加操作一,属性一样对应数据库字段,但是外键在pulish表中一定存在,否则报错。
多表添加操作二,按照publish对象赋值外键,先查询都publish对象。
一, 一对多关系,创建外键,外键创建到多的一方。
例如:书,出版社,的关系为 一对多,一个出版社 多个书。如下创建;
class Book(models.Model):
name = models.CharField(max_length=20)
price = models.FloatField()
pub_date = models.DateField()
# 创建外键,书对出版社 多对一。自动关联到publish表的主键上。
publish = models.ForeignKey('Publish')
def __str__(self):
return self.name
class Author(models.Model):
name = models.CharField(max_length=32)
执行命令: 命令上一个篇可查看
多表添加操作一,属性一样对应数据库字段,但是外键在pulish表中一定存在,否则报错。
def addbook(request):
Book.objects.create(name='liunx运维', price=77, pub_date='2019-07-01', publish_id=2)
return HttpResponse('创建成功')
多表添加操作二,按照publish对象赋值外键,先查询都publish对象。
def addbook(request):
# Book.objects.create(name='liunx运维', price=77, pub_date='2019-07-01', publish_id=2)
publish_objects_get = Publish.objects.get(name='人民出版社')
Book.objects.create(name='java入門', price=59, pub_date='2018-01-01', publish=publish_objects_get)
return HttpResponse('创建成功')
多表查询操作,
def select(request):
# book_objects_get = Book.objects.get(name='python基础')
# print(book_objects_get.publish)
# objects_filter = Book.objects.filter(publish__name='人民出版社').values('name')
# book_objects_filter = Publish.objects.filter(book__name='python基础').values('name')
values = Book.objects.filter(name='python基础').values('publish__name')
return HttpResponse(values)
二,多对多关系
例如:书和作者为多对多关系, 如下:
class Book(models.Model):
name = models.CharField(max_length=20)
price = models.FloatField()
pub_date = models.DateField()
# 创建外键,书对出版社 多对一。自动关联到publish表的主键上。
publish = models.ForeignKey('Publish', on_delete=models.CASCADE)
# 创建中间表,书对作者 多对多。
authors = models.ManyToManyField('Author')
def __str__(self):
return self.name
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField(default=20)
执行构建命令,在数据库中创建出三张表: