一、表和表之间的关系
- 一对一,多对多,一对多
models.py文件中创建的表,书和出版社是多对一,书和作者是多对多。
from django.db import models
# Create your models here.
class Publisher(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32, null=False, unique=True)
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32, null=False, unique=True)
price = models.DecimalField(max_digits=5, decimal_places=2, default=99.99)
count = models.IntegerField(default=1000)
maichu = models.IntegerField(default=0)
publisher = models.ForeignKey(to="Publisher", related_name='books')
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32, null=False, unique=True)
book = models.ManyToManyField(to="Book")
二、单表的curd
# 增
models.Publisher.objects.all().create(name='zhengzhou')
# 删
models.Publisher.objects.get(id=6).delete()
# 改
obj=models.Publisher.objects.get(id=3)
obj.name='zhengzhou'
obj.save()
# 查
ret = models.Publisher.objects.all()
for i in ret:
print(i.name)
三、一对多的curd
- 增删改操作和单表操作一样
book_obj=models.Book.objects.get(id=18) # 获取id=18 的书 的对象
publisher_obj = book_obj.publisher # 获取和这本书关联的出版社对象
publisher_obj .name='人民出版社' # 修改出版社对象的name属性
book_obj.publisher.save() # 保存
四、多对多的curd
- 书和作者是多对多,一本书可以由多个作者写,多个作者写的书也可叫一个名字
# 查id=1的作者写的有哪些书
author_obj = models.Author.objects.get(id=1)
for i in author_obj.book.all():
print(i.title)
# 改
author_obj = models.Author.objects.get(id=1)
author_obj.book.set([3,18]) # 用set()
author_obj.save()
# 增
new_author = models.Author.objects.create(name='胡汉san') # 新建一个作者对象
new_author.book.set([2,3,16])
# 删
dele_obj=models.Author.objects.get(id=14) # 获取要删除的对象
dele_obj.delete()