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‘]) # 清空再修改
查看更多关于Django基础5.1,模型层(二)多表操作的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did171115