首页 > 其他分享 >Django中ForeignKey函数详解

Django中ForeignKey函数详解

时间:2023-12-05 18:06:41浏览次数:36  
标签:Book Author models 模型 ForeignKey Django 详解

在 Django 中,ForeignKey 是一个数据库模型字段,用于创建多对一(many-to-one)的关系。它实质上是数据库表之间的一个链接,指向另一个模型的实例。在 Django 的 ORM(对象关系映射)系统中,ForeignKey 字段非常重要,因为它允许模型间的数据关联和交互。

基本用法

在 Django 模型中定义 ForeignKey 时,你需要指定它关联到哪个模型。例如,如果你有一个 Author 模型和一个 Book 模型,每本书都有一个作者,你可以在 Book 模型中使用 ForeignKey 来引用 Author 模型:

from django.db import models

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

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

参数

  1. 第一个参数
  • 指定关联的模型。在上面的例子中,Book 模型中的 author 字段关联到 Author 模型。
  1. on_delete
  • 这是必需的参数,用于定义当被引用的对象(如作者)被删除时,应如何处理与之关联的对象(如书籍)。
  • 常见的选项包括:
  • models.CASCADE:当被引用的对象被删除时,同时删除所有引用它的对象。
  • models.PROTECT:阻止删除被引用的对象。
  • models.SET_NULL:将引用设置为 NULL(需要字段被设置为 nullable)。
  • models.SET_DEFAULT:设置为默认值。
  • models.SET(...):设置为特定值或者调用函数。

关系访问

通过 ForeignKey 字段,你可以轻松访问关联的数据。例如,如果你有一个 Book 实例,你可以通过 book.author 来访问与之关联的 Author 实例。反过来,如果你有一个 Author 实例,你可以通过 author.book_set 来访问所有与该作者关联的 Book 实例(Django 自动为 ForeignKey 字段创建反向关系,使用模型名小写加 _set)。

进阶用法

ForeignKey 字段还支持许多其他选项和参数,如 related_name(用于定义反向关系的名称),limit_choices_to(限制可选择的对象),db_index(在数据库中为该字段创建索引)等,允许你根据应用需求灵活地构建复杂的数据库关系。

标签:Book,Author,models,模型,ForeignKey,Django,详解
From: https://blog.51cto.com/u_13188203/8694463

相关文章

  • C++11、C++14、C++17、C++20新特性总结(5万字详解)(转载)
    文章目录C++11是什么,C++11标准的由来C++auto类型推导完全攻略auto类型推导的语法和规则auto的高级用法auto的限制auto的应用使用auto定义迭代器auto用于泛型编程C++decltype类型推导完全攻略exp注意事项decltype推导规则decltype的实际应用汇总auto和......
  • 解决vue-django配置问题
    后端跨域问题django安装pipinstalldjango-cors-headers添加应用,主应用下的settingINSTALLED_APPS=[...#跨域'corsheaders',...]中间件设置MIDDLEWARE=[...#跨域中间键设置'corsheaders.middleware.CorsMiddleware', ...]添加黑白名单(se......
  • 数据库的几种连表方式详解
    数据库主要有五种连表方式首先需要准备两张表: 图书表bookid   name  price  publish_id1西游记 3312红楼梦5613三国演义6624西厢记556     出版社表publishid   name    addr1北京出版社北京......
  • [转]vue3+tsx开发语法详解
    原文地址:vue3+tsx开发语法详解-知乎很多组件库都使用了TSX的方式开发,主要因为其灵活性比较高,TSX和SFC开发的优缺点就不介绍了,这里主要说一下将SFC项目改造为TSX的过程。安装JSX库pnpminstall@vitejs/plugin-vue-jsx-D安装完之后在vite.config.ts进行插件使用,代码如下......
  • ​HTML代码混淆技术:原理、应用和实现方法详解
    ​HTML代码混淆是一种常用的反爬虫技术,它可以有效地防止爬虫对网站数据的抓取。本文将详细介绍HTML代码混淆技术的原理、应用以及实现方法,帮助大家更好地了解和运用这一技术。一、HTML代码混淆的原理HTML代码混淆是指将HTML源码通过特定的算法进行加密处理,使得人类可读的源码变......
  • IntelliJ IDEA 2023.2新特性详解第三弹!Docker、Kubernetes等支持!
    9Docker在Docker镜像层内预览文件现在可以在Services(服务)工具窗口中轻松访问和预览Docker镜像层的内容。从列表选择镜像,选择Showlayers(显示层),然后点击Analyzeimageformoreinformation(分析镜像以获得更多信息)。这将打开层中存储的文件列表,你可以右键点击文件,然后......
  • 硬件开发笔记(十四):RK3568底板电路LVDS模块、MIPI模块电路分析、LVDS硬件接口、MIPI硬件
    前言  本篇继续分析底板原理图mipi/lvds屏幕电路原理图、硬件接口详解。 LVDS与MIPI的区别  液晶屏有RGBTTL、LVDS、MIPI、HDMI接口,这些接口区别于信号的类型(种类),也区别于信号内容。RGBTTL接口信号类型是TTL电平,信号的内容是RGB666或者RGB888还有行场同步和......
  • Ansible自动化运维模块详解
    ansible ad-hoc点对点模块l ping模块主机连通性测试[root@node2~]#ansibleall-mping192.168.200.10|SUCCESS=>{    "ansible_facts":{        "discovered_interpreter_python":"/usr/bin/python"    },    "changed":fals......
  • django BaseCommand
    使用命令行执行脚本fromdjango.core.management.baseimportBaseCommandfromdjango.dbimporttransactionfromapps.db.modelsimportAdminMenuclassCommand(BaseCommand):help='管理端、PC端、H5端菜单'defadd_arguments(self,parser):pars......
  • CentOS7 安装 Oracle12c 详解
    1.安装前准备中科大镜像站下载完整版CentOS7 Indexof/centos/7/isos/x86_64/(ustc.edu.cn)安装时设置硬盘大小40G,选择GNOME桌面安装,勾选必要的一些东西安装时选择只装root用户重启后要求配置一个用户,设置用户名为oracle下载历史版本Oracle数据库 https://edelivery.o......