django 学习之model操作(想细化)
一、Field选项
- null=True 数据库为空
- blank=True admin相关为空
- choices:choices意味着静态数据的变化不会太大。
- db_column: 用于此字段的数据库的列的名称。如果没有给出,Django将使用该字段的名称
- db_index: 如果为True,将为此字段创建数据库索引
- db_tablepace: 如果此字段已经编入索引,则用于此字段索引的数据库表空间的名称。
- default: 字段的默认值(当创建新的模型实例并且为该字段提供值时使用默认值,当该字段是主键时,也会使用默认值none)
- editable: 如果为False,该字段将不会显示在管理员或者其他任何人,在验证模型过程中他们将会被跳过, 默认为True
- error_messages: 该error_messages参数允许你覆盖字段将引发的默认消息。传入一个字典,其中包含与之要覆盖的错误消息相匹配的密钥
- 错误消息键包括null,blank,invalid,invalid_choice,unique,和unique_for_date。
- htlp_text:显示额外的‘帮助’文本。即使你的字段未用于表单,对于文档也很有用。请注意,该值在自动生成的表单中不是html转义的。help_text可以包含html
- help_text="Please use the following format: <em>YYYY-MM-DD</em>."
- primary_key: 如果为True,设置为主键。如果没有指定任何primary_key,Django会自动添加一个AutoField来保存主键,所以你不需要在任何字段上设置,除非你想覆盖默认的主键行为。
- unique :如果为True,该字段在整个表格中必须是唯一的.如果unique=true ,则不需要指定db_index,因为unique意味着创建索引。
- 在旧版本Django1.11.中,unique=True无法使用FileField。
- unique_for_date: 将其设置为a的名称DateField或DateTimeField要求此字段对于日期字段的值是唯一的
- 举例来说,如果你有一个字段title有 unique_for_date="pub_date",那么Django的不允许的两个记录具有相同的入口title和pub_date。
- unique_for_month: 要求字段相对于月份是唯一的
二、字段类型
1、AutoField :一个IntegerField根据可用ID自动递增。你通常不需要直接使用它; 如果不另外指定,主键字段将自动添加到您的模型中。
2、BigAutoField: 一个64位整数,很像一个AutoField不同之处在于它是保证从适合数字1到9223372036854775807。
3、BigIntegerField: 一个64位整数,很像一个IntegerField不同之处在于它是保证从适合数字-9223372036854775808到 9223372036854775807。
4、BinaryField: 用于存储原始二进制数据的字段,它只支持bytes。请注意,该字段的功能有限。例如,对一个BinaryField值过滤查询集是不可能的。也不可能在a BinaryField中包含一个ModelForm。
#注意:滥用 BinaryField尽管您可能会考虑将数据存储在数据库中,但请考虑在99%的情况下这是糟糕的设计。该字段不是正确的静态文件处理的替代品。
5、BooleanField: 真假值
6、CharField: 一个字符串字段,用于小型到大型字符串。
CharField有一个额外的论证:max_length字段的最大长度
7、TextField:对于大量的文字,请使用TextField
8、DateField: 日期,由Python以datetime.date实例表示。有一些额外的可选参数:
auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间。
auto_now_add为添加时的时间,更新对象时不会有变动。 9、DateTimeField: 日期和时间,由Python以datetime.datetime实例表示。
10、DecimalField: 一个固定精度的十进制数,用Python在 Decimal实例中表示。
DecimalField.max_digits
数字中允许的最大位数。请注意,此数字必须大于或等于decimal_places。 DecimalField.decimal_places 号码一起存储的小数位数。 例如,要存储999分辨率为2位小数的数字,您可以使用: models.DecimalField(..., max_digits=5, decimal_places=2)
11、DurationField: 用于存储时间段的字段 - 由Python在Python中建模 timedelta
12、EmailField: 检查该值是否为有效的电子邮件地址。
13、FileField: 文件上传字段
class FileField(upload_to = None,max_length = 100,** options)[source] ¶
在模型中使用FileField或ImageField(见下文)需要几个步骤: 在你的设置文件中,你需要定义MEDIA_ROOT一个你想要Django存储上传文件的目录的完整路径。(对于性能,这些文件不存储在数据库中。)定义 MEDIA_URL为该目录的基本公用URL。确保该目录可由Web服务器的用户帐户写入。
将FileField或添加ImageField到您的模型中,定义upload_to选项以指定MEDIA_ROOT用于上传文件的子目录 。
所有将存储在数据库中的文件都是路径(相对于MEDIA_ROOT)。你很可能想使用urlDjango提供的便利属性。例如,如果你ImageField被调用 mug_shot,你可以在模板中获得图像的绝对路径 。{{ object.mug_shot.url }}
例如,假设您MEDIA_ROOT的设置为'/home/media',并且 upload_to设置为'photos/%Y/%m/%d'。所述'%Y/%m/%d' 的部分upload_to被strftime()格式化; '%Y'是四位数的一年,'%m'是两位数的月份,'%d'是两位数的一天。如果您在2007年1月15日上传文件,它将被保存在目录中/home/media/photos/2007/01/15。
#使用
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
urls.py
url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}), 14、FilePathField :仅限于文件系统上某个目录中的文件名。
15、FilePathField.path¶
需要。文件系统的绝对路径,从这个目录中 FilePathField选择。例如:"/home/images"。
FilePathField.match:可选的。作为字符串的正则表达式,FilePathField 用于过滤文件名。请注意,正则表达式将应用于基本文件名,而不是完整路径。例如:"foo.*\.txt$",它将匹配一个叫做foo23.txt但不是bar.txt或的文件foo23.png。
FilePathField(path="/home/images", match="foo.*", recursive=True) 16、FloatField:由float实例在Python中表示的浮点数。
17、ImageField:继承所有的属性和方法FileField,但也验证上传的对象是有效的图像。 除了可用于特殊属性FileField,一个ImageField也具有height和width属性。 为了便于查询这些属性,ImageField有两个额外的可选参数: ImageField.height_field¶
每次保存模型实例时将自动填充图像高度的模型字段的名称。 ImageField.width_field¶
每次保存模型实例时将使用图像宽度自动填充模型字段的名称。 18、IntegerField:整型
19、GenericIPAddressField:字符串格式的IPv4或IPv6地址(例如192.0.2.30或 2a02:42fe::4)。
20、NullBooleanField: 像一个BooleanField,但允许NULL作为其中一个选项。
21、PositiveIntegerField: 正整数
22、TextField: 一个大文本字段。该字段的默认表单小部件是a Textarea。
23、TimeField: 一段时间,由一个datetime.time实例在Python中表示。接受相同的自动填充选项DateField。
24、URLField:A CharField代表一个URL。
UUIDField: 用于存储通用唯一标识符的字段。使用Python的 UUID类。在PostgreSQL上使用时,它将以uuid数据类型存储 ,否则以char(32)。 通用唯一标识符是AutoFieldfor的 一个很好的选择primary_key。数据库不会为您生成UUID,因此建议使用default:
import uuid
from django.db import models class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# other fields
请注意,可调用(使用括号省略)传递给default,而不是一个实例UUID。
三、关系领域
ForeignKey:一对多
classForeignKey(to,on_delete,** options)
on_delete对应的值:
CASCADE:级联删除,Django模拟SQL约束ON DELETE CASCADE的行为,并删除包含ForeignKey的对象。
limit_choices_to: 设置指定的字段
django 学习之model操作(想细化)的更多相关文章
- django学习之Model(二)
继续(一)的内容: 1-跨文件的Models 在文件头部import进来,然后用ForeignKey关联上: from django.db import models from geography.m ...
- Python学习笔记整理总结【Django】:Model操作(二)
1.操作汇总 # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj = models ...
- Python学习笔记整理总结【Django】:Model操作(一)
Model操作(一) 一.Django ORM基本配置 ORM:关系对象映射(Object Relational Mapping,简称ORM)db Frist:到目前为止,当我们的程序涉及到数据库相关 ...
- django学习之Model(一)
认认真真学Django,从现在开始. 学习资料来源于官方网站:https://docs.djangoproject.com/en/1.6/ 1-新建一个models.py from django.db ...
- Python开发【Django】:Model操作(二)
Model操作 1.操作汇总: # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj ...
- Python开发【Django】:Model操作(一)
Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...
- django学习之Model(五)MakingQuery
接着上篇. 10-一次更新多个对象 有时想要对QuerySet中的所有对象的某一个field来设定一个值,这时候可以像下边这样用update(): # Update all the headlines ...
- django学习之Model(三)QuerySet
接下来主要学习Models中的Making queries 写好models.py后,django会自动提供一个数据库的抽象API,来实现CRUD(create, retrieve, update, ...
- django学习之Model(四)MakingQuery
上一篇写到MakingQuey中的filter,本篇接着来. 10)-扩展多值的关系 如果对一个ManyToManyField或ForeignKey的表进行filter过滤查询的话,有2中方法可以用. ...
随机推荐
- iOS开发,更改状态栏(StatusBar)文字颜色为白色
详细实现步骤 1.如图在Info.plist中进行设置,主要用于处理启动画面中状态栏(StatusBar)文字颜色. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5u ...
- Eclipse远程连接HBase
在Eclipse下新建一个Map/Reduce项目,并将以下jar添加到Build path: 程序代码: package thathbase; import java.io.IOException; ...
- Nginx 与Tomcat 实现动静态分离、负载均衡
Nginx 与Tomcat 实现动静态分离.负载均衡 一.Nginx简介: Nginx一个高性能的HTTP和反向代理服务器, 具有很高的稳定性和支持热部署.模块扩展也很容易.当遇到访问的峰值,或者有人 ...
- Java多线程之ReentrantLock重入锁简介与使用教程
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6543947.html 我们知道,线程安全问题需要通过线程之间的同步来解决,而同步大多使用syncrhoize ...
- 获取公钥证书的DN(Distinguished Name)
DN -- Distinguished Name,证书持有人的唯一标识符. 可以通过下面的openssl命令来打印出证书的DN. openssl x509 -subject -nameopt RFC ...
- .NET 工具生成引擎概述
Mark Michaelis 微软中国MSDN 过去几年大家一直都在使用 .NET Core(有这么久吗?)并且都知道“生成系统”经历了重大改变,不论是终止对 Gulp 的内置支持,还是放弃 Proj ...
- 转:Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide)
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 前言 Bullet据称为游戏世界占有率为第三的物理引擎,也是前几大引擎目前唯一能够 ...
- Jenkins中集成jmeter-maven插件
转自:http://my.oschina.net/u/1377774/blog/168969 目录[-] 第一步.先在maven工程中单独使用jmeter-maven插件 0.环境 1.在POM.xm ...
- m4, autoconf
http://www.gnu.org/software/m4/m4.html GNU M4 is an implementation of the traditional Unix macro pro ...
- Java Web 开发进阶案例之人事管理系统的完整实现
技术:Java+ jsp + servlet+ javabeans +sql+tomcat 概述 本系统的主要任务是实现人事管理系统的系统化和自动化管理, 主要包括招聘入 职.到期离职和员工调动信 ...