Django5.1

创建模型

建立下列模型

# 作者表
class Author(models.Model):
    name=models.CharField( max_length=32)
    age=models.IntegerField()
    # authorDetail=models.OneToOneField(to="AuthorDetail",to_field="nid",on_delete=models.CASCADE)
    authorDetail=models.OneToOneField(to="AuthorDetail",)
    # 取消级联 on_delete=models.SET_NULL
    # 默认是级联的 on_delete=models.CASCADE 二以上版本是需要手动添加

    def __str__(self):
        return self.name

# 作者详细信息表
class AuthorDetail(models.Model):
    birthday=models.DateField() # 出生日期
    # telephone=models.BigIntegerField()  # 电话
    telephone=models.CharField(max_length=12)  # 电话
    addr=models.CharField( max_length=64)

    def __str__(self):
        return self.addr

# 出版社表
class Publish(models.Model):
    name=models.CharField( max_length=32)
    city=models.CharField( max_length=32)
    email=models.EmailField()

    def __str__(self):
        return self.name

# 书籍表
class Book(models.Model):

    nid = models.AutoField(primary_key=True)
    title = models.CharField( max_length=32)
    publishDate=models.DateField()
    price=models.DecimalField(max_digits=5,decimal_places=2)
    publish=models.ForeignKey(to="Publish",to_field="id",on_delete=models.CASCADE)
    authors=models.ManyToManyField(to='Author',)

    def __str__(self):
        return self.title

添加表记录

 一对一添加记录

# 方式一
# 先创建关系数据 绑定作者信息进行添加
publish_obj = models.AuthorDetail.objects.create(
    birthday='1997-02-13',
    telephone='17233145632',
    addr='齐齐哈尔',
)
models.Author.objects.create(
    name='张起灵',
    age=88,
    authorDetail=publish_obj
)

# 方式二
# 绑定已有的数据,先找到,在创建
obj = models.AuthorDetail.objects.filter(addr='东银').first()
models.Author.objects.create(
    name='西楚霸王',
    age=45,
    authorDetail=obj,
)

 一对多添加记录

# 方式一
obj = models.Publish.objects.get(pk=3)
models.Book.objects.create(
    title='帅总修仙传',
    publishDate='2011-11-21',
    price=124,
    publish=obj,
)

# 方式二
obj = models.Publish.objects.get(pk=2)
models.Book.objects.create(
    title='三胖修仙传',
    publishDate='2013-11-21',
    price=164,
    publish_id=obj.pk,
)

多对多添加记录

# 方式一 常用
book_obj = models.Book.objects.get(pk=14)
book_obj.authors.add(*[7,8]) # 添加两位作者

# 方式二
# 先找到作者1和作者2 然后对作者对象进行打散添加
author1 = models.Author.objects.get(pk=12)
author2 = models.Author.objects.get(pk=13)
book_obj = models.Book.objects.get(pk=15)
book_obj.authors.add(*[author1,author2])

删除表记录

# 一对一 表一外键关联表二 表一删除 不影响表二 表二删除会影响表二(连带删除)
models.AuthorDetail.objects.get(id=3).delete()
models.Author.objects.get(id=2).delete()

# 一对多
models.Publish.objects.get(id=1).delete()
models.Book.objects.get(nid=6).delete()

# 多对多 表关系删除
book_obj = models.Book.objects.get(nid=12)
book_obj.authors.remove(8)    # 删除一条
book_obj.authors.remove(*[8,9])    # 删除多条

book_obj.authors.clear()      # 删除所有关系(清空) 
book_obj.authors.set("9")       # 清空再修改
book_obj.authors.set(['9','10'])       # 清空再修改
02-12 01:48