0

我想在我的 Django 模型中有几个字段,它们仅在创建时保存,而其他字段仅在更新时保存。例如“date_created”和“author”与“date_edited”和“last_editor”。

我如何实现这一点以及如何创建 2 个不同的场所/工作流来保存和更新模型,这在从管理员和我可能创建的自定义客户端表单保存时都有效?

编辑:

我正在谈论的字段不会出现在表单中,它们将在视图中创建。

4

2 回答 2

3

如果您想保留自定义视图和管理的功能,最好的地方是保存方法。其次,如果您尝试保存编辑日期时间,我建议您查看auto_now_add与orauto_now一起使用的参数。它们提供了一种方法来保存创建和最新编辑的时间戳记的值。看看这里。最后,其他解决方案可能是使用它为您提供一种在为模型调用 save 方法时调用方法的方法。这将帮助您解耦逻辑。DateTimeFieldDateFieldDjango Signals

class ExModel(models.Model):
  ...
  ...

  def save(self):
     if self.id:
       #update logic here
     else:
       #New creation logic here
于 2012-12-24T04:17:42.723 回答
2

您可以覆盖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)
于 2012-12-24T04:17:04.017 回答