2012-12-24 88 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