django中如何设置django datetime 格式field字段默认为特定时间,如1900-01-01 00:00:00

4534人阅读
django文档(9)
django(41)
Django model 参考(一) &&&&
django 中model 作为数据资源指定了字段以及一些处理该相应的功能。通常情况下,每个model对应数据库中的一张表
每个model都是从django.core.meta.Model中派生出来的model中每个属性(class attribute)对应着数据库表中的一个字段非字段信息(Model metadata)在类中被称作META
Field Objects
每个class attributes对应着数据库中的一个字段,其应该是由meta.Filed的派生的。
from django.core import meta
class Person(meta.Model):
&&&& first_name = meta.CharField(maxlength=30)
&&&& last_name = meta.CharFiled(&lastname&,maxlength=30)
除了 ForeignKey, ManytoManyFiled OneToOneField 使用verbose_name关键字以外,第一个可选参数是用来为字段命名的,如果不设置,系统会自动为起起名。
sites = meta.ManyToManyField(site,verbose_name=&list of sites&)
Field 选项
&&&& null 缺省设置为false.通常不将其用于字符型字段上,比如CharField,TextField上.字符型字段如果没有值会返回空字符串。
&&&& 该字段是否可以为空。如果为假,则必须有值
&&&& 一个用来选择值的2维元组。第一个值是实际存储的值,第二个用来方便进行选择。
&&&& SEX_CHOICES= (('F','Female'),('M','Male'),)
&&&& 如果为真将为此字段创建索引
&&&& 缺省值
&&&& 如果为假,admin模式下将不能改写。缺省为真
&&&& admin模式下帮助文档
primary_key
&&&& 设置主键。如果没有设置django创建表时会自动加上
&&&& id = meta.AutoField('ID', primary_key=True)
&&&& primary_key=True implies
blank=False,
null=False and unique=True. Only one primary key is allowed on an object.
radio_admin
&&&& 用于admin模式下将select转换为radio显示。只用于ForeignKey或者设置了choices
&&&& 数据唯一
unique_for_date
&&&& title =& meta.CharField(maxlength=30,unique_for_date='pub_date')
&&&& 系统将不允许title和pub_date两个都相同的数据重复出现
unique_for_month / unique_for_year
validator_list
&&&& 有效性检查。非有效产生 django.core.validators.ValidationError 错误
Field Types
&&&& 自动增长的整型字段。通常无需自己添加
BooleanField
&&&& 对于大量文字应该使用TextField。参数: maxlength
&&&& 参数: auto_now& 自动设置为对象保存时刻的时间。对于类似最后改动之类的应用很有效
&&&& auto_now_add& 从最初保存对象至今的增量时间
DateTimeField 同上
EmailField
&&&& 检查是否为email的CharField字段
&&&& 保存文件的相对路径名称
&&&& 绝对路径需要在setting中设置 MEDIA_ROOT。对于ImageField设置 MEDIA_URL。
&&&& 参数upload_to.相对于MEDIA_ROOT目录的子目录
&&&& 通过get_&fieldname&_url获取绝对路径
FilePathField
&&&& 通过给定参数获取文件列表(个人感觉)
&&&& path 必须要有。 文件系统的绝对路径
&&&& match 可选。一个正则表达式。用来做文件筛选过滤
&&&& recursive 可选。True 包含子目录查找
&&&& FilePathField(path=&/home/images&, match=&foo.*& , recursive=True)
FloatField
&&&& 浮点数字段。两个必须选项
&&&& max_digits 数字最多位数
&&&& decimal_places 小数点位置
&&&& meta.FloatField(...,max_digits=5,decimal_places=2)&& /////100.00
ImageField
&&&& 基本上同FileField.会进行文件格式检查。两个额外选项
&&&& height_field, width_field 如果设置这两项,会自动对图片进行缩放后再保存
IntegerField
IPAddressField
NullBooleanField
&&&& 比BooleanField多了一个NULL状态
PhoneNumberField
&&&& 美国格式电话号码 xxx-xxx-xxxx. CharField
PositiveIntegerField
&&&& 正整数
PositiveSmallIntegerField
&&&& 一个小的正整数。根据数据库的设置
&&&& 小片断。什么都可以。通常用来存url
&&&& SlugField 被暗指 maxlength=50 db_index=True
&&&& 选项: prepopulate_from 一个用来自动生成slug的字段列表
SmallIntegerField
&&&& 选项: auto-population(可能不对) from DateField and DateTimeField
&&&& 选项: verify_exists& 如果为True ,系统自动检查该url是否存在不为404
USStateField
&&&& 两字符美国州简写
&&&& 保存xml数据。
&&&& 选项:schema_path .指定relaxNG格式schema用来检验xml合法性
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场Django python(2)
创建django的model时,有DateTimeField、DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime()、date()、time()三中对象。这三个field有着相同的参数auto_now和auto_now_add,表面上看起来很easy,但实际使用中很容易出错,下面是一些注意点。
DateTimeField.auto_now
这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储“最后修改时间”的场景下,十分方便。需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的。
DateTimeField.auto_now_add
这个参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储“创建时间”的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。
admin中的日期时间字段
auto_now和auto_now_add被设置为True后,这样做会导致字段成为editable=False和blank=True的状态。editable=False将导致字段不会被呈现在admin中,blank=Ture表示允许在表单中不输入值。此时,如果在admin的fields或fieldset中强行加入该日期时间字段,那么程序会报错,admin无法打开;如果在admin中修改对象时,想要看到日期和时间,可以将日期时间字段添加到admin类的readonly_fields中:
class YourAdmin(admin.ModelAdmin):
readonly_fields = ('save_date', 'mod_date',)
admin.site.register(Tag, YourAdmin)
如何将创建时间设置为“默认当前”并且可修改
那么问题来了。实际场景中,往往既希望在对象的创建时间默认被设置为当前值,又希望能在日后修改它。怎么实现这种需求呢?
django中所有的model字段都拥有一个default参数,用来给字段设置默认值。可以用default=timezone.now来替换auto_now=True或auto_now_add=True。timezone.now对应着django.utils.timezone.now(),因此需要写成类似下面的形式:
from django.db import models
import django.utils.timezone as timezone
class Doc(models.Model):
add_date = models.DateTimeField('保存日期',default = timezone.now)
mod_date = models.DateTimeField('最后修改日期', auto_now = True
html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为 13:00:00,但是页面显示的却是Apr. 03, 2016, 1 p.m.
为了页面和数据库中显示一致,需要在页面格式化时间,需要添加&td&{{&infor.updatetime|date:&Y-m-d H:i:s&&}}&/td& 类似的过滤器。刷新页面,即可正常显示。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:15955次
排名:千里之外
原创:43篇
转载:33篇
(1)(7)(3)(8)(5)(6)(12)(18)(1)(2)(8)(6)mysql中时间日期 datetime字段保存日期出现-mysql教程-数据库-壹聚教程网mysql中时间日期 datetime字段保存日期出现
如果大家注意一下datetime日期格式类型的话就应该可以不要问了,datetime日期必须是
10:10:10 这种,否则就有可能出来
正确的php sql语句写法应该是:&
$sql = &insert into table(datetime) values('&.date(&Y-m-d h:i:s&,time()).&')&; //datetime字段的类型为&datetime&,
注意后面要插入的数据是字符串要加&单引号&。
这样就没错了,时间日期类型插入数据库之前要格式化,否则就出现插入的全是的问题。
个人建义,大家保存时间时最好使用int类型保存time()生成的日期这样操作会更方便。
上一页: &&&&&下一页:相关内容Python的Django框架中设置日期和字段可选的方法
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Python的Django框架中设置日期和字段可选的方法,是Django设置当中的基本操作,需要的朋友可以参考下
设置字段可选
在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的。 举个例子,我们想要Author模块中的email字段成为可选,即允许不填。 在现实世界中,你可能没有为每个作者登记邮箱地址。
为了指定email字段为可选,你只要编辑Book模块(回想第五章,它在mysite/books/models.py文件里),在email字段上加上blank=True。代码如下:
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(**blank=True** )
这些代码告诉Django,作者的邮箱地址允许输入一个空值。 所有字段都默认blank=False,这使得它们不允许输入空值。
这里会发生一些有趣的事情。 直到现在,除了__unicode__()方法,我们的模块充当数据库中表定义的角色,即本质上是用Python的语法来写CREATE TABLE语句。 在添加blank=True过程中,我们已经开始在简单的定义数据表上扩展我们的模块了。 现在,我们的模块类开始成为一个富含Author对象属性和行为的集合了。 email不但展现为一个数据库中的VARCHAR类型的字段,它还是页面中可选的字段,就像在管理工具中看到的那样。
当你添加blank=True以后,刷新页面Add author edit form (http://127.0.0.1:8000/admin/books/author/add/ ),将会发现Email的标签不再是粗体了。 这意味它不是一个必填字段。 现在你可以添加一个作者而不必输入邮箱地址,即使你为这个字段提交了一个空值,也再不会得到那刺眼的红色信息“This field is required”。
设置日期型和数字型字段可选
虽然blank=True同样适用于日期型和数字型字段,但是这里需要详细讲解一些背景知识。
SQL有指定空值的独特方式,它把空值叫做NULL。NULL可以表示为未知的、非法的、或其它程序指定的含义。
在SQL中, NULL的值不同于空字符串,就像Python中None不同于空字符串("")一样。这意味着某个字符型字段(如VARCHAR)的值不可能同时包含NULL和空字符串。
这会引起不必要的歧义或疑惑。 为什么这条记录有个NULL,而那条记录却有个空字符串? 它们之间有区别,还是数据输入不一致? 还有: 我怎样才能得到全部拥有空值的记录,应该按NULL和空字符串查找么?还是仅按字符串查找?
为了消除歧义,Django生成CREATE TABLE语句自动为每个字段显式加上NOT NULL。 这里有个生成Author模块的例子:
CREATE TABLE "books_author" (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(40) NOT NULL,
"email" varchar(75) NOT NULL
在大多数情况下,这种默认的行为对你的应用程序来说是最佳的,因为它可以使你不再因数据一致性而头痛。 而且它可以和Django的其它部分工作得很好。如在管理工具中,如果你留空一个字符型字段,它会为此插入一个空字符串(而* 不是*NULL)。
但是,其它数据类型有例外:日期型、时间型和数字型字段不接受空字符串。 如果你尝试将一个空字符串插入日期型或整数型字段,你可能会得到数据库返回的错误,这取决于那个数据库的类型。 (PostgreSQL比较严禁,会抛出一个异常;MySQL可能会也可能不会接受,这取决于你使用的版本和运气了。)在这种情况下,NULL是唯一指定空值的方法。 在Django模块中,你可以通过添加null=True来指定一个字段允许为NULL。
因此,这说起来有点复杂: 如果你想允许一个日期型(DateField、TimeField、DateTimeField)或数字型(IntegerField、DecimalField、FloatField)字段为空,你需要使用null=True * 和* blank=True。
为了举例说明,让我们把Book模块修改成允许 publication_date为空。修改后的代码如下:
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField(**blank=True, null=True** )
添加null=True比添加blank=True复杂。因为null=True改变了数据的语义,即改变了CREATE TABLE语句,把publication_date字段上的NOT NULL删除了。 要完成这些改动,我们还需要更新数据库。
出于某种原因,Django不会尝试自动更新数据库结构。所以你必须执行ALTER TABLE语句将模块的改动更新至数据库。 像先前那样,你可以使用manage.py dbshell进入数据库服务环境。 以下是在这个特殊情况下如何删除NOT NULL:
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
(注意:以下SQL语法是PostgreSQL特有的。)
我们将在第十章详细讲述数据库结构更改。
现在让我们回到管理工具,添加book的编辑页面允许输入一个空的publication date。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具i love python
联系方法:(选填)
昵称:c77cc
居住地:北京 海淀
i love python:

我要回帖

更多关于 django datetime 格式 的文章

 

随机推荐