我有这样的课

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

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

同时,某些字段具有关于它们的规则,例如:

如果like=True ,则finished=True 我遇到的问题是如何正确更新值,当客户发帖说{like:True, finished:False} ,如果我们在setter上使用like来设置finish = True,则在setter上使用setter会重置值为假。

有什么好的方法/设计模式可以帮助澄清和解决这种情况?

===============>>#1 票数:0

在我看来,在这种情况下,您将不得不编写一个将返回HTTP 400或类似内容的验证器。 也许409更合适? 在任何一种情况下,您都可以包含错误字符串,以说明哪个键/值组合导致了错误。

===============>>#2 票数: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

  ask by Dmitry Shevchenko translate from so

未解决问题?本站智能推荐: