ORM(四)字段参数
null:当null=True,如果数据库中该字段没有值(不包括空字符串),则系统默认将该字段填充NULL。
当null=False(默认为False),如果数据库中该字段没有值(不包括空字符串),则该字段可以为空。
当数据库中该字段设置了unique=True和blank=True时,该字段null=True而不能是Fale,这样可以避免多次插入数据时造成unique唯一冲突。
blank:注意,这与上面的null不同。null是控制数据库中的字段,而blank是控制前端form表单。
如果字段为blank=True,则表单验证将允许输入空值。如果字段为blank=False,则该字段必须填写。
db_column:用于此字段的数据库列的名称。如果没有给出,Django将使用字段的名称。
db_index:如果db_index=True,则允许创建该字段为索引。
db_tablespace:如果此字段是索引,则db_tablespace的值将应用于此字段索引的数据库表空间的名称。系统默认使用工程项目settings中的DEFAULT_INDEX_TABLESPACE。如果后端数据库不支持数据库表空间可以忽略此项。
default:为字段设置默认值,这个值可以是一个对象,但每次调用这个对象时都会重新创建一个对象。
官方说default的值不能是可变对象(如model instance、list、set等),如果要使用这些可变的对象使用函数调用的方式来实现,如(官方示例):
def contact_default():
return {"email": "to1@example.com"} contact_info = JSONField("ContactInfo", default=contact_default)
但测试发现default=list,dict,set完全没问题,不清楚原因。
primary_key:primary_key=True将该字段设为主键。
unique:unique=True设置该字段值在表中是唯一的,不能重复。
unique_for_date:将该字段日期(DateField、DateTimeField)设置为唯一不能重复。
unique_for_year:将该字段年份(DateField、DateTimeField)设置为唯一不能重复。
unique_for_moth:将该字段月份(DateField、DateTimeField)设置为唯一不能重复。
verbose_name:对字段进行描述,一般用于显示时的title、表头等,如果不写该字段,默认verbose_name=该字段名。
如:first_name = models.CharField(max_length=30) 中默认verbose_name='first_name'。
choices:是一个可迭代对象(list或者tuple),如果参数2个以上(如:[(A, B), (A, B) ...]),则该字段默认前端form组件的select选择框,而不把它当成是一个文本字段。
如下官方示例:
from django.db import models class Student(models.Model):
FRESHMAN = 'FR'
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
YEAR_IN_SCHOOL_CHOICES = (
(FRESHMAN, 'Freshman'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
)
year_in_school = models.CharField(
max_length=2,
choices=YEAR_IN_SCHOOL_CHOICES,
default=FRESHMAN,
) def is_upperclass(self):
return self.year_in_school in (self.JUNIOR, self.SENIOR)
显示选择框的内容,如:sex = models.IntegerField(choices=[(0, '女'),(1, '男'),],default=1),如果我们使用"对象.sex"的方式将只能获取0或者是1,而不能获取男或者女。可以使用“对象.get_sex_display”的方式来获取选项中的男或女。
如下示例:
from django.db import models
class Person(models.Model):
SHIRT_SIZES = ( # 定义choices的选项
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
)
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=1,choices=SHIRT_SIZES) # 使用choices选项 >>>from 项目_app.models import Person # 在终端中导入模块
>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size # 直接打印字段
'L' >>> p.get_shirt_size_display() # 使用对象.get_字段_display()的方式打印字段
'Large'
关于上述示例,choices=SHIRT_SIZES,中SHIRT_SIZES的第一个元素的值将作为数据库中的值,第二个元素的值将被显示在form组件中。
editable:如果editable=False,则该字段不会显示在admin 或者其它ModelForm中。默认为True。
error_messages:自定义错误信息(字典类型),从而定制想要显示的错误信息;字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
如:{'null': "不能为空.", 'invalid': '格式错误'}
参考文档:https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.Field.db_tablespace
ORM(四)字段参数的更多相关文章
- Python--day68--Django ORM的字段参数、元信息
字段参数 null 用于表示某个字段可以为空. unique 如果设置为unique=True 则该字段在此表中必须是唯一的 . db_index 如果db_index=True 则代表着为此字段设置 ...
- Django 之 ORM 字段和字段参数
ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- python3开发进阶-Django框架的ORM常用字段和参数
阅读目录 常用字段 字段合集 自定义字段 字段参数 关系参数 多对多的关联关系的三种方式 一.常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中 ...
- Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法
Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法 一丶ORM常用字段 ...
- Django中ORM介绍和字段及字段参数
Object Relational Mapping(ORM) 1 ORM介绍 1.1 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对 ...
- Django ORM 常用字段和参数
Django ORM 常用字段和参数 一:常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. I ...
- ORM常用字段和参数
目录: ORM常用字段和参数
- Django之ORM字段和字段参数
ORM介绍 ORM概念 ORM由来 ORM的优势 ORM的劣势 ORM总结 Django中的ORM Django项目使用MySQL数据库 Model 快速入门 字段 自定义字段 字段参数 Model ...
- django中的ORM介绍和字段及字段参数
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)
Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...
随机推荐
- linux下redis数据库的简单使用
一.redis简介 Redis是一个key-value存储系统.和 Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持list ...
- 20.QT-Qpixmap实现图片鼠标缩放,鼠标拖动示例(详解)
通过 QPainter 绘画实现,以本地图片985*740为例 如下图所示: 效果如下所示: 实现原理 主要通过以下函数实现: , ); //平铺显示pixmap //x y w h :表示绘画区域 ...
- php对接微信小程序支付
前言:这里我就假装你已经注册了微信小程序,并且基本的配置都已经好了.注: 个人注册小程序不支持微信支付,所以我还是假装你是企业或者个体工商户的微信小程序,其他的商户号注册,二者绑定,授权,支付开通,就 ...
- Eclipse报错Resource '/.org.eclipse.jdt.core.external.folders/.link5' already exists.
Eclipse查看源码出现source not found,重新Build Path选择jdk的jar包时,出现Resource '/.org.eclipse.jdt.core.external.fo ...
- 巩固java(一)----java与对象
C语言是一种面向过程语言,在解决问题时,要先分析出问题的解决步骤,然后按顺序一步步实现,使用的时候一个一个调用.所以面向过程编程是以过程为中心的. 不同于面向过程编程,面向对象编程 ...
- 从零开始学Web之HTML(二)标签、超链接、特殊符号、列表、音乐、滚动、head等
大家好,这里是 Daotin 从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享 ...
- Python 员工信息管理系统
学Python将近一个月了,第一次写了两百多行代码,一个很简单的脚本. 员工信息管理系统: 需求: 1.管理员账户能够增加,删除,修改,查询员工信息,并且设置管理员账户. 2.普通账户可以查看所有员工 ...
- bzoj 2822 [AHOI2012]树屋阶梯 卡特兰数
因为规定n层的阶梯只能用n块木板 那么就需要考虑,多出来的一块木板往哪里放 考虑往直角处放置新的木板 不管怎样,只有多的木板一直扩展到斜边表面,才会是合法的新状态,发现,这样之后,整个n层阶梯就被分成 ...
- GIT的使用流程
GIT的使用流程 1 github注册流程 1 进入github官网:https://github.com/ 2 注册一个自己的github账号 3 右上角选择New repository 4 进入c ...
- [转]现代Linux系统上的栈溢出攻击
1. 基本内容 这个教程试着向读者展示最基本的栈溢出攻击和现代Linux发行版中针对这种攻击的防御机制.为此我选择了最新版本的Ubuntu系统(12.10),因为它默认集成了几个安全防御机制,而且它也 ...