2012-12-24 128 views
0

我想有一对夫妇在我的Django模型字段,只在创作, 等,其仅在更新保存的保存的。 例如“date_created”和“author”与“date_edited”和“last_editor”。模型建立与更新在Django

如何实现这一目标?如何创建2个不同的场地/工作流程保存和更新的模型,这将是有效无论从管理,并从我可以创建自定义客户端的形式保存时?

编辑:

场我说的是不会出现的形式,他们将在视图中创建。

回答

3

如果要保留自定义视图和管理员的功能,最好的地方应该是保存方法。其次,如果您试图保存编辑日期时间,我会建议查看和auto_nowDateTimeFieldDateField一起使用的参数。它们提供了一种方法来保存创建和最新编辑的Timstamp的价值。看看here。最后,其他解决方案可以使用Django Signals,这将为您提供一种在模型调用save方法时调用方法的方法。这将帮助你解耦逻辑。

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

    def save(self): 
    if self.id: 
     #update logic here 
    else: 
     #New creation logic here 
+0

是的,auto_now和auto_now_add看起来没问题。 012vUpvote。 如果还有其他答案,请等待。 –

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) 
+0

与自我.pk一样,它也发生在我身上。无论如何,我希望这些事情会有某种捷径。 –

+1

不需要在保存方法上设置日期。改为使用此模型定义: date_created = models.DateTimeField(auto_now_add = True) date_edited = models.DateTimeField(auto_now = True) – dannyroa