Net*_*zen 7 django django-models django-admin
我有一个叫django的模型Blog.
我想在last_modified_date的当前模型中添加一个字段.我知道如何设置默认值,但我想以某种方式让它随时通过管理界面修改博客条目时自动更新.
是否有某种方法可以将此值强制为每个管理站点保存的当前时间?
还有一些方法可以添加一个mod_count字段,并在每次修改管理站点博客条目时自动计算它吗?
hug*_*own 12
DateTimeField在模型中创建一个.每当保存时都会更新.这要求您使用以下auto_now_add选项:
class DateTimeField([auto_now=False, auto_now_add=False, **options])
Run Code Online (Sandbox Code Playgroud)
DateTimeField.auto_now_add
每次保存对象时自动将字段设置为现在.对"最后修改"的时间戳有用.请注意,始终使用当前日期; 它不仅仅是您可以覆盖的默认值.
它应该看起来像这样:
class Message(models.Model):
message = models.TextField()
active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
对于第二部分,我认为你必须超载
ModelAdmin.save_model(self, request, obj, form, change)
Run Code Online (Sandbox Code Playgroud)
正如James Bennett 在这里描述的那样.它看起来像这样:
class EntryAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if change:
obj.change_count += 1
obj.save()
Run Code Online (Sandbox Code Playgroud)
接受的答案不再正确.
对于较新的django版本,您将不得不使用auto_now=True参数而不是auto_now_add=True,这将仅在最初创建对象时设置字段值.
从文档:
DateField.auto_now_add
首次创建对象时自动将字段设置为现在.用于创建时间戳.
现在通过auto_now以下方式实现所需的功能 :
DateField.auto_now
每次保存对象时自动将字段设置为现在.
因此,为了实现自我更新时间戳,应该像这样创建一个模型:
class Message(models.Model):
message = models.TextField()
active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now=True)
mod_count = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)
mod_count每次修改此模型时要增加重载模型的save()方法:
def save(self, *args, **kwargs):
self.mod_count +=1
return super(Message,self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6131 次 |
| 最近记录: |