Django的模型字段是否有onupdate
参数?
例如,在使用SQLAlchemy的Flask中,可以使用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的onupdate=...
db.Column()
参数相同
我尝试过以下模型对象来模拟上面的Flask代码,但是如何才能在Django中获得相同的onupdate=...
“效果”?
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
,每当我更改用户的值时,它都会更改,例如如果我创建了一个用户并保存,然后更改name
,created_on
应保持不变,但updated_on
会自动更新?
答案 0 :(得分:3)
在django中,您有auto_now_add
的{{1}}和auto_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
将字段设置为创建或更新对象时的当前时间。你应该知道一些古怪的行为:
该字段仅在调用Model.save()时自动更新。使用其他方式(如QuerySet.update())更新其他字段时,不会更新该字段,但您可以在更新中为该字段指定自定义值。
https://docs.djangoproject.com/en/1.9/ref/models/fields/#datetimefield和https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.DateField
文档中的更多信息