2017-07-22 34 views
1

Django的1.11Django的:如何創建模型

我有多個型號具有相同的字段status,例如repairOrder,statusUpdate其中有一樣的地位做一個里程錶場時更新相關的模型字段。當用戶做出新的statusupdate或repairOrder時,我希望它更新狀態模型中的某些字段。我看到它的方式有四個選項

  1. 覆蓋上statusupdate
  2. using signals
  3. custom model manager保存()方法,該方法可以查詢相關的模型和更新領域
  4. 模型上的方法將調用相關型號 並更新我想要的地方。

我已經刪除了一些字段以使示例更簡單。

class Status(models.Model): 
    odometer = models.IntegerField() 
    vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE) 
    ... 

class statusUpdate(models.Model): 
    odometer = models.IntegerField() 
    vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE) 
    ... 

當用戶創建一個新的stautsUpdate時,我希望Status的里程錶也被設置爲。

問:什麼是Django的方式來更新相關模型的字段?

編輯:這個問題很多編輯來澄清這個問題

回答

0

的實例,其實所有的方法都不錯,有自己的優點和缺點。

如果這些模型在不同的應用程序中,並且大都是獨立的,那麼信號就很酷。關於它的好處是它在正常情況下不會打擾您,您將擁有更多的控制權。

通過覆蓋save()方法做到這一點是個不錯的主意,但是如果你不必每次或大部分時間都這樣做,但是在特定的時間,創建一個不同的方法,通過它你可以調用save()方法以及做你想做的任何事情。這裏的好處是,你可以放置儘可能多的條件,嘗試捕捉異常,如果條件和它不會影響保存方法。

你必須找到最適合情況需要的東西。從我自己的經驗和人們的觀點來看,不要在必要之前使用信號。

0

不需要在狀態更新里程錶場,你已經有一個外鍵狀態模式,使您可以訪問狀態模型的各個領域。只需從statusmodel中刪除里程錶,然後當用戶執行狀態更新時更新里程錶字段。

status_update_instance.odometer = some value 
status_update.save() 

以上是statusupdate模型

+0

重複字段的原因是它保存用戶更新狀態的歷史記錄等。該公司喜歡能夠查看每天正在投放的狀態更新和平均里程數。他們從外部django這樣做,因此需要分離模型。 – dieusu

+0

另一方面,我可以繼承該模型並讓它們自動更新嗎? – dieusu

+0

對於第一個評論,給出的答案也將在那裏工作。對於第二個評論是的,你可以繼承模型,但如果你想自動更新,那麼你必須重寫保存方法,或者你必須做一個自定義模型管理器。重寫保存方法將更容易。 –