【发布时间】:2016-10-09 12:38:11
【问题描述】:
Django 的模型字段是否有onupdate 参数?
例如,在带有 SQLAlchemy 的 Flask 中,可以对数据库架构的 db.Column() 使用 onupdate=... 参数执行以下操作:
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()中的onupdate=...参数是一样的吗
我尝试了以下模型对象来模拟上面的 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 会自动更新?
【问题讨论】:
-
在解决您的问题的实质之前,您的所有示例都是错误的,因为您传递的是调用函数 (
now()) 而不是函数本身 (now) 的结果。让我们知道这不是您问题的根源。 -
感谢凯文注意到这一点!不,这不是问题的根源。看起来重复问题的帖子可能是相关的。
标签: python django flask sql-update schema