Django模型层实现多表关系创建和多表操作

下面我将详细介绍一下 Django 模型层实现多表关系创建和多表操作的完整攻略,并提供两个示例实现。

1.多表关系创建

多表关系创建主要是通过外键关系来实现的,常见的外键关系有一对多关系和多对多关系。

1.1 一对多关系

1.1.1 示例1

例如,我们有两个模型类:AuthorBook,一个作者可以写多本书,因此作者模型是一对多关系的主表,书籍模型是一对多关系的副表。

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

注意到Book模型类中,ForeignKey字段表示外键关系,on_delete表示删除关联表记录时的行为,这里我们采用的是级联删除。

1.1.2 示例2

另一个例子是电商系统中购物车和商品之间的关系,一个购物车中可以有多个商品,是一对多关系。

from django.db import models

class Cart(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,)
    time =  models.DateTimeField(auto_now=True)

class CartItem(models.Model):
    cart = models.ForeignKey(Cart, on_delete=models.CASCADE,)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField(default=0)

总的来说,使用一对多关系需要在多的一方定义一个外键,指向一的一方的主键,并指定删除行为。

1.2 多对多关系

多对多关系在 Django 中使用ManyToManyField类型来实现,它通过一个中间表来连接两个模型之间的关系。

1.2.1 示例1

例如,我们有两个模型类:BookAuthor,一本书可以有多个作者,也可以一个作者写作多本书。

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(max_length=100)

    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=200)
    authors = models.ManyToManyField(Author)

    def __str__(self):
        return self.title

注意到Book模型类中,ManyToManyField字段指向了Author模型类。Django 会自动创建一个名为book_authors的中间表来保存两个模型之间的关系,我们无需在数据库中手动创建。

1.2.2 示例2

另一个例子是用户与组之间的关系。一个用户可以属于多个组,一个组也可以有多个用户。

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=100)
    users = models.ManyToManyField(User)

    def __str__(self):
        return self.name

总的来说,使用多对多关系需要在其中一个模型中定义ManyToManyField,随后Django会自动创建一个中间表关系,保存两个表之间的关系。

2.多表操作

在多表操作中,我们可以通过 Dango 的 ORM 查询相关表中的数据,以及进行相关的操作,如增加、删除、更新、查询等。

2.1 查询数据

我们可以使用filterget等方法来进行查询,比如下面的例子是查询一个作者写的所有书籍:

books = Book.objects.filter(author__name='John')

其中author__name表示连表查询,查询Book表中外键关联的Author表中作者名为John的书籍。

2.2 增加数据

我们可以通过创建对象来添加一些数据,如下面的例子是添加了一个作者和他的一些书籍:

author = Author.objects.create(name='John', email='john@example.com')

book1 = Book.objects.create(title='My Book 1', author=author)
book2 = Book.objects.create(title='My Book 2', author=author)

2.3 更新数据

我们可以通过修改对象的属性来更新表中的数据,如下面的例子是修改某一本书的属性:

book = Book.objects.get(title='My Book 1')
book.title = 'New Title'
book.save()

2.4 删除数据

我们可以通过使用delete方法来删除表中的数据,如下面的例子是删除某一本书:

book = Book.objects.get(title='My Book 1')
book.delete()

综上所述,我们可以使用 Django 的 ORM 来进行多表关系的创建与操作,使得跨表查询和数据的增删改查非常方便。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django模型层实现多表关系创建和多表操作 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django框架(二十)– Django rest_framework-权限组件

    一、权限组件的使用 # 用户信息表 class UserInfo(models.Model): name = models.CharField(max_length=32) # 写choice user_choice=((0,’普通用户’),(1,’会员’),(2,’超级用户’)) # 指定choice,可以快速的通过数字,取出文字 user_type=mo…

    Django 2023年4月16日
    00
  • django 实现websocket

    一、简述:django实现websocket,之前django-websocket退出到3.0之后,被废弃。官方推荐大家使用channels。 channels通过升级http协议 升级到websocket协议。保证实时通讯。也就是说,我们完全可以用channels实现我们的即时通讯。而不是使用长轮询和计时器方式来保证伪实时通讯。 他通过改造django框架…

    Django 2023年4月12日
    00
  • Django 基础篇

    一:Django 简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西。为了达到这个目标,Django 提供了通用Web开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。Django的理念是DRY(…

    Django 2023年4月9日
    00
  • python-django缓存

    1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力. 缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问…

    Django 2023年4月13日
    00
  • Python Django ORM与模型详解

    “Python Django ORM与模型详解”的完整攻略可以分为以下几个部分: 1. 概述 Django是一套MVC框架,它提供了ORM(Object-Relational Mapping)技术,ORM可以将数据库中的表结构映射成Python类,这样我们在Python中就可以使用类来操作数据库。 2. 配置 要使用Django ORM,我们首先需要在set…

    Django 2023年5月16日
    00
  • pandas配合Django同步把数据库数据导出成excel文件

    前言 在工作中,我们经常需要导出数据库中或固定格式的数据。这个时候我们就要用到pandas来进行数据的处理了。pandas是一个非常优秀的python数据处理工具。 获取数据 # 从前端获取到的参数 starttime = request.data.get(‘starttime’) # 开始时间 endtime = request.data.get(‘end…

    Django 2023年4月13日
    00
  • django中ModelForm多表单组合的解决方案

    django是python语言快速实现web服务的大杀器,其开发效率可以非常的高!但因为秉承了语言的灵活性,django框架又太灵活,以至于想实现任何功能都有种“条条大路通罗马”的感觉。这么多种选择放在一起,如何分出高下?我想此时的场景下就两个标准:1、相同的功能用最少的代码实现(代码少BUG也会少);2、相对最易于理解,从而易于维护和扩展。书归正传,web…

    Django 2023年4月12日
    00
  • Django中ORM的基本使用教程

    下面我会详细讲解Django中ORM的基本使用教程和两个示例。 ORM简介 ORM全称是Object-Relational Mapping,即对象关系映射,它是一种程序设计技术,用于实现面向对象程序语言与关系数据库之间的映射。在ORM中,每一个数据表映射为一个类,每一条记录映射为类的一个实例。 在Django中,ORM支持各种关系型数据库,如MySQL、Po…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部