2013-09-01 95 views
0

我有一個名爲Calculation的模型,它與MeasureOneToMany的關係連接。 當第一次創建Calculation模型對象時,我想啓動某個字典。稍後我填寫值並保存對象。初始創建模型時的初始成員

當從DB 加載對象時不應創建字典,並且在我發出save()之前不應將其保存到數據庫。

我有紅色的有關信號(1)和工廠(12),但我還是有點困惑就如何實現這一目標。

models.py

class Calculation(models.Model): 
    measure = models.ForeignKey(Measure) 
    modified_time = models.DateTimeField(auto_now = True) 
    raw_parameters = hstore.DictionaryField(db_index=True, null=True) 
    result = models.DecimalField(null=True,max_digits=15, decimal_places=2) 

    def __init__(self, *args, **kwargs): 
     # init the relation 
     super(Calculation, self).__init__(*args, **kwargs) 
     # init a list of required parameters with empty values 
     self.raw_parameters = dict((k,None) for k in self.measure.parameters.all().values_list('name',flat=True)) 

,現在並不好,因爲它也將現有對象加載運行,並在raw_parameters覆蓋現有值的方式。 我試過了一個create函數,但它不起作用。

** Django newbi。謝謝。

回答

0

如果您的意圖是重寫您的模型的「創建」功能,則必須覆蓋實例的id未設置時的save方法。

在你的情況下,代碼會沿着這些路線的東西:

class Calculation(models.Model): 
    # your fields 

    def save(self, *args, **kwargs): 
     if self.pk is None: 
      # your "on create only" logic here 
      # ... 
     super(Calculation, self).save(*args, **kwargs) 

「唯上創建」節約型與未分配pk新創建的對象,只有當代碼將被調用。相關文檔here

+0

感謝您的評論。我會更好地解釋我的自我 - 「計算」類提供了某種模擬。我可能會在這個對象上工作一段時間,但最終根本不會保存它,所以我從來沒有實際發出過'save'。是在對象創建時隱式調用的'save'函數? – haki

+0

你需要一個Django模型嗎?爲什麼不簡單地創建一個類呢? – LaundroMat

+0

同意@LaundroMat。僅在需要持久性時才使用模型類。如果不需要持久化,則使用標準類和它的實例。 –