django第三次(转自刘江)
所有的模型字段都可以接收一定数量的参数,比如CharField至少需要一个max_length参数。下面的这些参数是所有字段都可以使用的,并且是可选的。
null
该值为True时,Django在数据库用NULL保存空值。默认值为False。对于保存字符串类型数据的字段,请尽量避免将此参数设为True,那样会导致两种‘没有数据’的情况,一种是NULL,另一种是‘空字符串’。
blank
True时,字段可以为空。默认False。和null参数不同的是,null是纯数据库层面的,而blank是验证相关的,它与表单验证是否允许输入框内为空有关,与数据库无关。所以要小心一个null为False,blank为True的字段接收到一个空值可能会出bug或异常。
choices
用于页面上的选择框标签,需要先提供一个二维的二元元组,第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容。在浏览器页面上将显示第二个元素的值。例如:
YEAR_IN_SCHOOL_CHOICES = (('FR', 'Freshman'),('SO', 'Sophomore'),('JR', 'Junior'),('SR', 'Senior'),('GR', 'Graduate'),)
一般来说,最好将选项定义在类里,并取一个直观的名字,如下所示:
from django.db import modelsclass 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)
要获取一个choices的第二元素的值,可以使用get_FOO_display()
方法,其中的FOO用字段名代替。对于下面的例子:
from django.db import modelsclass Person(models.Model): SHIRT_SIZES = ( ('S', 'Small'), ('M', 'Medium'), ('L', 'Large'), ) name = models.CharField(max_length=60) shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)
使用方法:
>>> p = Person(name="Fred Flintstone", shirt_size="L") >>> p.save() >>> p.shirt_size 'L' >>> p.get_shirt_size_display() 'Large'
db_column
该参数用于定义当前字段在数据表内的列名。如果未指定,Django将使用字段名作为列名。
db_index
该参数接收布尔值。如果为True,数据库将为该字段创建索引。
db_tablespace
用于字段索引的数据库表空间的名字,前提是当前字段设置了索引。默认值为工程的DEFAULT_INDEX_TABLESPACE
设置。如果使用的数据库不支持表空间,该参数会被忽略。
default
字段的默认值,可以是值或者一个可调用对象。如果是可调用对象,那么每次创建新对象时都会调用。设置的默认值不能是一个可变对象,比如列表、集合等等。lambda匿名函数也不可用于default的调用对象,因为匿名函数不能被migrations序列化。
注意:在某种原因不明的情况下将default设置为None,可能会引发intergyerror:not null constraint failed
,即非空约束失败异常,导致python manage.py migrate
失败,此时可将None改为False或其它的值,只要不是None就行。
editable
如果设为False,那么当前字段将不会在admin后台或者其它的ModelForm表单中显示,同时还会被模型验证功能跳过。参数默认值为True。
error_messages
用于自定义错误信息。参数接收字典类型的值。字典的键可以是null
、 blank
、 invalid
、 invalid_choice
、 unique
和unique_for_date
其中的一个。
help_text
额外显示在表单部件上的帮助文本。使用时请注意转义为纯文本,防止脚本攻击。
primary_key
如果你没有给模型的任何字段设置这个参数为True,Django将自动创建一个AutoField自增字段,名为‘id’,并设置为主键。也就是id = models.AutoField(primary_key=True)
。
如果你为某个字段设置了primary_key=True,则当前字段变为主键,并关闭Django自动生成id主键的功能。
primary_key=True
隐含null=False
和unique=True
的意思。一个模型中只能有一个主键字段!
另外,主键字段不可修改,如果你给某个对象的主键赋个新值实际上是创建一个新对象,并不会修改原来的对象。
from django.db import models class Fruit(models.Model): name = models.CharField(max_length=100, primary_key=True) ############### >>> fruit = Fruit.objects.create(name='Apple') >>> fruit.name = 'Pear' >>> fruit.save() >>> Fruit.objects.values_list('name', flat=True) ['Apple', 'Pear']
unique
设为True时,在整个数据表内该字段的数据不可重复。
注意:对于ManyToManyField和OneToOneField关系类型,该参数无效。
注意: 当unique=True时,db_index参数无须设置,因为unqiue隐含了索引。
注意:自1.11版本后,unique参数可以用于FileField字段。
unique_for_date
日期唯一。可能不太好理解。举个栗子,如果你有一个名叫title的字段,并设置了参数unique_for_date="pub_date"
,那么Django将不允许有两个模型对象具备同样的title和pub_date。有点类似联合约束。
unique_for_month
同上,只是月份唯一。
unique_for_year
同上,只是年份唯一。
verbose_name
为字段设置一个人类可读,更加直观的别名。
对于每一个字段类型,除了ForeignKey
、ManyToManyField
和OneToOneField
这三个特殊的关系类型,其第一可选位置参数都是verbose_name
。如果没指定这个参数,Django会利用字段的属性名自动创建它,并将下划线转换为空格。
下面这个例子的verbose name
是"person’s first name":
first_name = models.CharField("person's first name", max_length=30)
下面这个例子的verbose name
是"first name":
first_name = models.CharField(max_length=30)
对于外键、多对多和一对一字字段,由于第一个参数需要用来指定关联的模型,因此必须用关键字参数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", )
另外,你无须大写verbose_name
的首字母,Django自动为你完成这一工作。
validators
运行在该字段上的验证器的列表。
转载于:https://www.cnblogs.com/fytech-/p/10765124.html
django第三次(转自刘江)相关推荐
- Django模版(三)
Django模版(三) 文章目录 Django模版(三) 一.图片验证码 1.验证码 2.手动实现验证码 3.调用验证码 4.验证 5.点击"看不清,换一个",换一个新的验证码 二 ...
- Django视图(三)
Django视图(三) 文章目录 Django视图(三) 一.Cookie 1.简介 2.Cookie的特点 3.设置Cookie 4.读取Cookie 二.Session 1.启用Session 2 ...
- Django模型(三)
Django模型(三) 文章目录 Django模型(三) 一.模型类关系 1.关系字段类型 2.一对多关系 3.多对多关系 二.关联查询 1.通过对象执行关联查询 2.通过模型类执行关联查询 三.自关 ...
- Django基础三之视图函数
Django基础三之视图函数 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML ...
- Pycharm社区版运行Django的三种方法(Pycharm添加配置参数快捷启动Django、Pycharm社区版Django项目创建)
目录 Pycharm社区版运行Django的三种方法 Django安装和环境变量的配置(MacOS) 创建Project 启动Django Webserver 方法一:终端启动 方法二:pycharm ...
- day 53-1 Django基础三之视图函数
Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Djang ...
- Django笔记三十八之发送邮件
这一篇笔记介绍如何在 Django 中发送邮件. 在 Python 中,提供了 smtplib 的邮件模块,而 Django 在这个基础上对其进行了封装,我们可以通过 django.core.mail ...
- Day 62 Django第三天
2.GET请求能够被cache,GET请求能够被保存在浏览器的浏览历史里面(密码等重要数据GET提交,别人查看历史记录,就可以直接看到这些私密数据)POST不进行缓存.3.GET参数是带在URL后面, ...
- Django(三)框架之第二篇
https://www.cnblogs.com/haiyan123/p/7717788.html 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html ...
最新文章
- Spring Cloud 覆写远端的配置属性
- layer弹出信息框API
- Hadoop 2.x的DistributedCache无法工作的问题
- swiftui_SwiftUI的混合包
- 《代码大全》阅读笔记-5-软件构建中的设计
- java基础Runtime类的使用
- win10添加环境变量后没用_python 学习之在 win10 下安装 Anaconda
- I00034 累加与累乘
- python项目小案例:一个网页响应超时提醒小闹钟
- 2019,最坏的一年,最好的一年,交学费要趁早
- android程序设计学习,android编程入门很简单 android编程入门自学
- 红帽linux创建c文件,RedHat成功运行的第一个C程序全过程(适合新手)
- Linux中使用宝塔面板部署tipask3.*超详细教程,吐血两天部署成功,把过程整理出来,送给被官方文档折磨的小白们~~~~
- 2022-2028年中国商业智能化行业发展现状调查及前景战略分析报告
- 《数据结构与算法》知识小结
- ansys怎么合并体_ANSYS梁体组合连接计算方法的讨论
- 基于推荐算法的电影系统——总体设计(2)
- 你如何破解后安装PS cs6
- Kettle Job机制
- 试一试 kolla部署OpenStack Ocata