当前位置: 首页 > news >正文

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

在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.lryc.cn/news/477033.html

相关文章:

  • 2024系统架构师---论软件可靠性设计及其应用论文
  • SpringBoot在线教育系统:云部署策略
  • Zabbix 6.0 部署
  • 用Python遍历输出烟感名称和状态
  • Redis的持久化以及性能管理
  • Docker部署Meta-Llama-3.1-70B-Instruct API openai格式,vLLM速度对比
  • USB协议学习
  • TDengine 数据订阅 vs. InfluxDB 数据订阅:谁更胜一筹?
  • 用户批评 SAP 的人工智能战略
  • Jest进阶知识:React组件的单元测试
  • MATLAB——矩阵操作
  • 智能数据驱动的风险管理:正大金融科技的创新实践
  • 贝尔不等式的验证
  • GR2——在大规模视频数据集上预训练且机器人数据上微调,随后预测动作轨迹和视频(含GR1详解)
  • 伦敦金价格是交易所公布的吗?
  • Oracle SQL Loader概念及用法
  • ReactPress 是什么?
  • MR30分布式IO模块与高效PLC协同
  • 成都睿明智科技有限公司共赴抖音电商蓝海
  • Android15音频进阶之音频策略加载及使用(九十一)
  • Spring设值注入
  • Spring整合Mybatis过程
  • 常见HR问题篇
  • 调用数据集mnist(下载+调用全攻略)
  • 【基础语法】Java Scanner hasNext() 和 hasNextLine() 的区别
  • react使用Fullcalendar 实战用法
  • 优秀项目经理必知的10款项目管理软件推荐
  • 植物神经紊乱不用怕,这些维生素来帮你!
  • NRF52832学习笔记(41)——添加串口库libuarte
  • Moore Perf System 1.1版本