2016-06-09 58 views
0

Django模型字段是否有onupdate参数?自动更改一个字段的更新时的Django模型字段并冻结一次性写入另一个字段?

例如,在烧瓶SQLAlchemy的,它可能像做与onupdate=...参数以下db.Column()数据库模式的:

import datetime 

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' 
db = SQLAlchemy(app) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    created_on = db.Column(db.Text, default=datetime.datetime.utcnow().isoformat()) 
    updated_on = db.Column(db.Text, default=datetime.datetime.utcnow().isoformat(), 
          onupdate=datetime.datetime.utcnow().isoformat()) 

docs,有一个auto_now参数,就是SQLAlchemy的db.Column()

我试过以下模型对象来模拟上面的Flask代码,但我怎么能得到相同的onupdate=...在Django中的“效果”?

from django.db import models 
from django.utils.timezone import now 

class User(models.Model): 
    id = models.IntegerField() 
    created_on = models.DateTimeField(default=now) 
    updated_on = models.DateTimeField(default=now) 
    name = models.CharField(default='blah blah') 

如何“冻结”,使其只能被添加一次,并永远不会再后来改变为create_on字段的值?

但是,对于updated_on,每当我改变用户的值时,它就会改变。如果我创建了一个用户并保存,则之后更改namecreated_on应保持不变,但updated_on会自动更新?

+0

的[Django的Django的不具有自动时间戳创建/更新场像CakePHP的?(可能的复制http://stackoverflow.com/questions/10979488/ django-do-django-have-an-automatic-timestamp-create-update-field-like-cakephp) – dirn

+2

在解决问题的实质之前,所有的例子都是错误的,因为你传递了调用函数的结果('now()')而不是函数本身('now')。让我们知道这不是问题的根源。 –

+0

感谢Kevin注意到这一点!不,这不是问题的根源。看起来像重复问题的帖子可能是相关的。 – alvas

回答

2

在Django你有auto_now_addauto_now可选参数为models.DateTimeField

class User(models.Model): 
    id = models.IntegerField() 
    created_on = models.DateTimeField(auto_now_add=True) 
    updated_on = models.DateTimeField(auto_now=True) 
    name = models.CharField(default='blah blah') 

auto_now_add将字段设置为当前时间创建一个对象,并auto_now会现场,当一个对象设置为当前时间被创建或更新。您应该了解一些古怪的行为:

该字段仅在调用Model.save()时自动更新。在以其他方式更新其他字段(如QuerySet.update())时,字段不会更新,但您可以在更新中为字段指定自定义值。在https://docs.djangoproject.com/en/1.9/ref/models/fields/#datetimefieldhttps://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.DateField在文档

更多信息

相关问题