0

私はこのようなクラスを持っています

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

dict を置くことで、REST API から更新できます{like:True, finished:True...}

同時に、一部のフィールドにはルールがあります。たとえば、次のようになります。

ならlike=Truefinished=True。私が抱えている問題は、値を適切に更新する方法です。たとえば、クライアントが投稿したときに{like:True, finished:False}、ここでセッター on を使用して finished=True を設定すると、setter on finished は値を False にリセットします。

このケースを明確にして解決するのに役立つ良い方法/設計パターンは何ですか?

4

2 に答える 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
于 2013-04-16T01:21:30.600 に答える
0

この場合、HTTP 400 などを返すバリデーターを作成する必要があるように思えます。多分409がより適切ですか?いずれの場合も、エラーの原因となったキーと値の組み合わせを説明するエラー文字列を含めることができます。

于 2013-04-16T01:16:05.907 に答える