Django-Model层ORM之多表操作(七)

目录

 

一, 一对多关系,创建外键,外键创建到多的一方。

例如:书,出版社,的关系为 一对多,一个出版社 多个书。如下创建;

多表添加操作一,属性一样对应数据库字段,但是外键在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)

执行构建命令,在数据库中创建出三张表:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值