当前位置 : 主页 > 编程语言 > python >

Django基础5.1,模型层(二)多表操作

来源:互联网 收集:自由互联 发布时间:2021-06-25
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.CASC

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])       # 清空再修改
网友评论