2013-04-16 58 views
0

我有這樣Python的二傳手設計模式

class Ownership: 
    like = models.BooleanField() 
    queue = models.BooleanField() 
    started = models.BooleanField() 
    current = models.BooleanField() 
    finished = models.BooleanField() 

一個類可以從一個REST API進行更新,通過把一個字典{like:True, finished:True...}

與此同時,一些字段具有對他們的規則,例如:

如果like=True,然後finished=True。我遇到的問題是如何正確更新值,當客戶端的帖子,例如{like:True, finished:False},在這裏如果我們使用setter來設置finished = True,那麼setter將完成將值重置爲False。

什麼是有助於澄清和解決這種情況的好方法/設計模式?

+0

可能的解決方案 - http://stackoverflow.com/a/7755070/813471 – Chan

回答

0

在我看來,你將不得不編寫一個驗證器,在這種情況下會返回一個HTTP 400或類似的東西。也許409更合適?無論哪種情況,您都可以包含一個錯誤字符串來解釋導致錯誤的鍵/值組合。

0

您可以覆蓋默認的保存方法來驗證和更改值

class Ownership: 
    like = models.BooleanField() 
    queue = models.BooleanField() 
    started = models.BooleanField() 
    current = models.BooleanField() 
    finished = models.BooleanField() 

    def save(self, *args, **kwargs): 
     if self.like: 
      self.finished = True 
     super(Ownership, self).save(*args, **kwargs) # Call the "real" save() method