IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 0x04 -- Django -- 模型介绍 -- 4 -- 其他 -> 正文阅读

[Python知识库]0x04 -- Django -- 模型介绍 -- 4 -- 其他

0x00 – 自动设置主键

默认情况下,Django 给每个模型一个自动递增的主键,其类型在 AppConfig.default_auto_field 中指定,或者在 DEFAULT_AUTO_FIELD 配置中全局指定。
例如:

id = models.BigAutoField(primary_key=True)

如果你想自己指定主键, 在你想要设置为主键的字段上设置参数 primary_key=True。如果 Django 看到你显式地设置了 Field.primary_key,将不会自动在表(模型)中添加 id 列。

每个模型都需要拥有一个设置了 primary_key=True 的字段(无论是显式的设置还是 Django 自动设置)。

在早期版本中主键为隐式的 AutoField 字段,它是 IntegerField (整数类型)。
3.2 版本默认主键设置为的 BigAutoField 字段,它是一个64位整数(64 bit integer)。

所以在早期版本升级为3.2版本的时候,应该会看到配置DEFAULT_AUTO_FIELD的警告和提示。


0x01 – 字段备注名

  • 任何字段类型都接收一个可选的位置参数 verbose_name (第一个位置)
  • 默认情况下:Django 会自动使用字段的属性名作为该参数值,并且把下划线转换为空格。
  • 例外情况:ForeignKeyManyToManyFieldOneToOneField(此三者为关联关系)
# 备注名为: “person's first name” (作为第一个参数)
first_name = models.CharField("person's first name", max_length=30)

# 备注名为: “first name”  (默认情况)
first_name = models.CharField(max_length=30)

ForeignKey, ManyToManyField and OneToOneField 接收的第一个参数为模型的类名,后面可以添加一个 verbose_name关键字参数

poll = models.ForeignKey(
    Poll,
    on_delete=models.CASCADE,
    verbose_name="the related poll",	# 作为关键字参数传递
)
sites = models.ManyToManyField(Site, verbose_name="list of sites")
place = models.OneToOneField(
    Place,
    on_delete=models.CASCADE,
    verbose_name="related place",		# 作为关键字参数传递
)

0x02 – 跨文件模型

关联另一个应用中的模型:需要在定义模型的文件开头导入需要被关联的模型,然后就可以在其他有需要的模型类当中关联它了。比如:

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,
    )

0x03 – 字段命名限制

  1. 一个字段的名称不能是 Python 保留字,因为这会导致 Python 语法错误。比如:
class Example(models.Model):
    pass = models.IntegerField() # 'pass' 是一个 python 保留字
  1. 一个字段名称不能包含连续的多个下划线,原因在于 Django 查询语法的工作方式。比如:
class Example(models.Model):
    foo__bar = models.IntegerField() # 'foo__bar' 有两个下划线
  1. 字段名不能以下划线结尾,原因同上。

但是,这些限制是可以被解决的,因为字段名没要求和数据库列名一样。查看 db_column 选项。

SQL保留字,例如 join, where 或 select, 是 可以被用在模型字段名当中的,因为 Django 在对底层的 SQL 查询当中清洗了所有的数据库表名和字段名,通过使用特定数据库引擎的引用语法。


0x04 – 自定义字段类型

如果已经存在的模型字段不能满足你的需求,或者你希望支持一些不太常见的数据库列类型,你可以创建自己的字段类。在 编写自定义模型字段(model fields) 中提供了创建自定义字段的各方面内容。


2021年9月17日

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:05:38  更:2021-09-18 10:06:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:55:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码