ORM多表操作(object与queryset)

Posted believepd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORM多表操作(object与queryset)相关的知识,希望对你有一定的参考价值。

ORM多表操作

一、创建模型

作者模型:一个作者有姓名和年龄。

作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息;作者详情模型和作者模型之间是一对一的关系。

出版商模型:出版商有名称,所在城市以及邮箱。

书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系;一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系。

from django.db import models


class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    # on_delete=models.CASCADE  当删除关联表中的数据时,与之关联也删除
    authorDetail = models.OneToOneField(to="AuthorDetail", on_delete=models.CASCADE)


class AuthorDetail(models.Model):
    id = models.AutoField(primary_key=True)
    birthday = models.DateField()
    telephone = models.BigIntegerField()
    address = models.CharField(max_length=64)


class Publisher(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=32)
    email = models.EmailField()


class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)
    publishDate = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)
    # 与Publish建立一对多的关系,外键字段一般建立在多的一方
    publisher = models.ForeignKey(to="Publisher", to_field="id", on_delete=models.CASCADE)
    # 与Author表建立多对多的关系,ManyToManyField通常设置在正向查询多的那一边,自动创建第三张表
    authors = models.ManyToManyField(to="Author")

二、插入测试数据

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

以上是关于ORM多表操作(object与queryset)的主要内容,如果未能解决你的问题,请参考以下文章

Django学习手册 - ORM 数据表操作

Django之ORM查询复习与cookie

Django ORM查询总结

ORM多表操作之一对多查询之下划线查询

17-2 orm单表操作和多表操作

占位先