Django---数据库(多表关联)

news/2024/11/5 2:10:35 标签: 数据库, django, python

在Django中操作数据库并实现多表关联,主要是通过定义模型(Models)及其关系,然后利用Django ORM(Object-Relational Mapping)执行数据库操作。

定义模型及其关系

首先,需要在models.py文件中定义模型。Django支持几种常见的数据库关系:

一对一关系(OneToOneField):一个模型实例只能与另一个模型实例相关联。

外键关系(ForeignKey):一个模型实例可以与一个或多个其他模型实例相关联(多对一)。

多对多关系(ManyToManyField):一个模型实例可以与多个其他模型实例相关联,反之亦然。

# models.py  
from django.db import models  
  
class Author(models.Model):  
    name = models.CharField(max_length=100)  
  
class Book(models.Model):  
    title = models.CharField(max_length=200)  
    author = models.ForeignKey(Author, on_delete=models.CASCADE)  # 外键关系  
  
class Tag(models.Model):  
    name = models.CharField(max_length=100)  
  
class BookTag(models.Model):  
    book = models.ForeignKey(Book, on_delete=models.CASCADE)  
    tag = models.ForeignKey(Tag, on_delete=models.CASCADE)  
    # 注意:这实际上是通过一个中间模型来实现的多对多关系,Django也支持直接使用ManyToManyField  
    # 例如:在Book模型中直接添加 tags = models.ManyToManyField(Tag)

在上面的示例中,Book模型通过ForeignKeyAuthor模型相关联,表示一本书只能有一个作者。而BookTag模型则是一个中间模型,用于实现BookTag之间的多对多关系(尽管Django也支持直接在模型中使用ManyToManyField来定义多对多关系)。

pk_url_kwarg

这个属性在Django的类视图中用于指定URL中应该包含哪个关键字参数来代表主键(Primary Key)的值。

在默认情况下,DetailView会查找名为pkid的URL参数来获取对象的主键值

lug_url_kwarg

这个属性用于指定URL中应该包含哪个关键字参数来代表slug的值(slug通常是一个简短的、人类可读的唯一标识符)。

在DetailView中,如果您想通过slug而不是主键来获取对象,可以设置slug_url_kwarg为您URL中使用的关键字参数名,并设置slug_field为模型中用于查找对象的字段名。

slug_field

这个属性指定了模型中哪个字段应该被用作slug来查找对象。

context

在Django中,context 是一个字典(或类似字典的对象),它用于在Django模板中传递数据。当在Django视图中渲染一个模板时,可以通过context来传递变量、对象或任何其他数据到模板中,以便在模板中使用这些数据来生成HTML。


http://www.niftyadmin.cn/n/5738798.html

相关文章

print实现自我介绍

笔记 nameinput(请输入您的姓名:) ageinput(请输入您的年龄:) mottoinput(请输入您的座右铭:) print(-------------自我介绍----------------) print(姓名:,name) print(年龄:,age) print(座右铭:,motto)

Ubuntu 22.4 LTS 源码编译Tigervnc

1、安装前的依赖软件准备 -- make version > 3.10 apt install cmake -- tigervnc依赖 apt install zlib1g-dev libpixman-1-dev libjpeg-turbo8-dev libfltk1.3-devapt install libsystemd-dev libavutil-devapt-get install gettext libffmpeg-ocaml-dev…

phcharm贪吃蛇小游戏后续一(代码1,2,3前文已发)

代码4 上篇博文中实现方块在网格线中移动,但我们发现方块并没有刚好在网格线边缘移动(会在线上),同时方块如果比作蛇头的话,一般老的贪吃蛇游戏只会90度转弯,此前的代码左右或上下相当于180度,…

‘ssh-keygen‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。(详细版2024)

目录 1 问题2 解决办法2.1 查看后台服务2.2 下载缺少的服务2.3 配置环境变量2.4 重启服务2.5 检测是否成功 3 后记 1 问题 想远程连接服务器的时候,在cmd端执行 ssh-keygon,报错 ‘ssh-keygon’ 不是内部或外部命令,也不是可运行的程序或批处…

YOLOv10的网络架构解析

引言 在计算机视觉领域,目标检测一直是研究热点之一。YOLO(You Only Look Once)系列模型因其高效的性能和端到端的检测能力而备受关注。2024年5月25日,由清华多媒体智能组开发的YOLOv10正式发布,这一版本在模型架构、…

详解:枚举类

枚举类(Enum)是一种特殊的类,用于定义一组固定的常量。在Java中,枚举类使用enum关键字来定义。 特点: 枚举类的每个实例都是唯一的,且在编译时确定。 枚举类的实例可以直接通过类名访问,不需要…

Apache 配置出错常见问题及解决方法

Apache 配置出错常见问题及解决方法 一、端口被占用问题 问题描述:在启动 Apache 时,出现“Address already in use”或类似的错误提示,这意味着 Apache 想要使用的端口已经被其他程序占用,导致 Apache 无法正常启动。原因分析: 系统中已经有其他的应用程序在使用 Apache…

LeetCode 0633.平方数之和:模拟

【LetMeFly】633.平方数之和:模拟 力扣题目链接:https://leetcode.cn/problems/sum-of-square-numbers/ 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 b2 c 。 示例 1: 输入:c 5 输…