django_models_一对一关系
OneToOneField
用来定义一对一关系。 和使用其它Field
类型一样:在模型当中把它做为一个类属性包含进来。
当某个对象想扩展自另一个对象时,最常用的方式就是在这个对象的主键上添加一对一关系。
OneToOneField
要一个位置参数:与模型关联的类。
例如,如果你正在建立一个“places”的数据库,那么你将建立一个非常标准的地址、电话号码等 在数据库中。 接下来,如果你想在place数据库的基础上建立一个restaurant数据库,而不想将已有的字段复制到Restaurant
模型,那你可以在 Restaurant
添加一个OneToOneField
字段,这个字段指向Place
(因为Restaurant 本身就是一个Place;事实上,在处理这个问题的时候,你应该使用一个典型的 inheritance,它隐含一个一对一关系)。
与ForeignKey
一样,可以定义递归关系,并可以引用尚未定义的模型。
提示:
在一对一关联关系模型示例中有一套完整的例子。
OneToOneField
字段也接受一个可选的parent_link
参数。
在以前的版本中,OneToOneField
字段会自动变成模型 的主键。 不过现在已经不这么做了(不过要是你愿意的话,你仍可以传递 primary_key
参数来创建主键字段)。 所以一个 模型 中可以有多个OneToOneField
字段。
跨文件的模型¶
访问其他应用的模型是非常容易的。 在文件顶部你定义模型的地方,导入相关的模型来实现它。 然后,无论在哪里需要的话,都可以引用它。 例如: from django.db import models from geography.models import ZipCode class Restaurant(models.Model): # ... zip_code = models.ForeignKey( ZipCode, on_delete=models.SET_NULL, blank=True, null=True, )
字段名称限制¶
Django 对字段的命名只有两个限制:
-
字段的名称不能是Python 保留的关键字,因为这将导致一个Python 语法错误。 例如:
class Example(models.Model): pass = models.IntegerField() # 'pass' is a reserved word!
-
由于Django 查询语法的工作方式,字段名称中连续的下划线不能超过一个。 例如:
class Example(models.Model): foo__bar = models.IntegerField() # 'foo__bar' has two underscores!
这些限制有变通的方法,因为没有要求字段名称必须与数据库的列名匹配。 参见db_column
选项。
SQL 的保留字例如select
、where
和join
,可以用作模型的字段名,因为Django 会对底层的SQL 查询语句中的数据库表名和列名进行转义。 它根据你的数据库引擎使用不同的引用语法。
原文地址:https://www.cnblogs.com/Xingtxx/p/11010052.html
- 比特儿(Bter.com) 比特币交易平台被盗事件全解析
- BitTorrent Bleep:无法被监控的聊天软件
- QQ蠕虫的行为检测方法
- 趋势OfficeScan系列产品漏洞分析
- [置顶] 浅谈我为什么选择用Retrofit作为我的网络请求框架
- 基于HTML5的Canvas指纹跟踪技术
- 有关 Android 应用桌面角标 (BadgeNumber) 实现的探讨
- XSS的原理分析与解剖
- Hold安全公司公布俄罗斯大型泄密事件细节
- 走近科学:如何搞定各种各样的终端机
- android 打造不同的Seekbar
- 最简单最常用的LinearLayout线性布局
- 漏洞科普:你对弱口令重视吗?
- 自定义View简单使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring Boot 特性之 Fluent Builder API
- 一文搞懂 Flink Timer
- DATE类型的“小陷阱”
- 简单聊下 Java Agent
- Byte Buddy 基础知识
- 两种在SAP Cloud Application Studio里通过编程对C4C UI字段赋值的方法
- 如何使用 BTrace v.2.0.1
- 三分钟写一个 Java 多线程
- 使用纯粹的ABAP位操作实现两个整数相加
- 如何给SAP Cloud for Customer UI上的字段添加自定义校验逻辑
- guide-rpc-framework 源码学习
- 如何参与一个开源项目(多图)
- 微信小程序支付服务端.net core实现,简单直接
- PBE加密 .net 实现
- .net Core 图片验证码 基于SkiaSharp实现