我想在我的 Django 模型中有几个字段,它们仅在创建时保存,而其他字段仅在更新时保存。例如“date_created”和“author”与“date_edited”和“last_editor”。
我如何实现这一点以及如何创建 2 个不同的场所/工作流来保存和更新模型,这在从管理员和我可能创建的自定义客户端表单保存时都有效?
编辑:
我正在谈论的字段不会出现在表单中,它们将在视图中创建。
我想在我的 Django 模型中有几个字段,它们仅在创建时保存,而其他字段仅在更新时保存。例如“date_created”和“author”与“date_edited”和“last_editor”。
我如何实现这一点以及如何创建 2 个不同的场所/工作流来保存和更新模型,这在从管理员和我可能创建的自定义客户端表单保存时都有效?
编辑:
我正在谈论的字段不会出现在表单中,它们将在视图中创建。
如果您想保留自定义视图和管理的功能,最好的地方是保存方法。其次,如果您尝试保存编辑日期时间,我建议您查看auto_now_add
与orauto_now
一起使用的参数。它们提供了一种方法来保存创建和最新编辑的时间戳记的值。看看这里。最后,其他解决方案可能是使用它为您提供一种在为模型调用 save 方法时调用方法的方法。这将帮助您解耦逻辑。DateTimeField
DateField
Django Signals
class ExModel(models.Model):
...
...
def save(self):
if self.id:
#update logic here
else:
#New creation logic here
您可以覆盖save
模型的方法并通过检查主键是否有价值来识别那里的创建和更新。
def save(self,*args,**kwargs):
if not self.pk: #object is being created
self.author = 'abc'
self.date_created = datetime.now()
else: #object is being updated
self.last_editor = 'abc'
self.date_edited = datetime.now()
super(MyModel,self).save(*args,**kwargs)