我有一个这样的课程
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。
有助于澄清和解决此案例的好方法/设计模式是什么?
答案 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