Python二传手设计模式

时间:2013-04-16 01:06:15

标签: python design-patterns

我有一个这样的课程

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

可以通过放置词典{like:True, finished:True...}来从REST API更新。

与此同时,一些领域有关于它们的规则,例如:

如果like=True,则finished=True。我遇到的问题是如何正确更新值,当客户发帖时,如{like:True, finished:False},这里如果我们使用setter就像设置finished = True,那么setter on finished会将值重置为False。

有助于澄清和解决此案例的好方法/设计模式是什么?

2 个答案:

答案 0 :(得分:0)

在我看来,你似乎必须编写一个在这种情况下会返回HTTP 400或类似的验证器。也许409更合适?在任何一种情况下,您都可以包含一个错误字符串来解释导致错误的键/值组合。

答案 1 :(得分: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