2016-09-03 5 views
1

複数の値のビットマスクであるflagsというプロパティを持つモデルがあります。 django-rest-frameworkを使用してAPIとして公開したいと思います。異なるフラグは異なるブール値のプロパティです。たとえば、フラグがFLAG_NEW=1,FLAG_DELETED=2の場合は、isNewisDeletedフィールドを公開したいとします。読み取り専用モデルの場合、これは簡単です。SerializerModelFieldを使用し、フラグが設定されているかどうかを確認してください。しかし、これはデシリアライズしたいときには機能しません(これは読み取り専用フィールドです)。私はカスタムフィールドを使うことができますが、source=パラメータに何を入れるべきですか?もし私がsource=flagsを入れたら、彼らはお互いを上書きしてしまいます。どうすれば初期値を得ることができますか?Django RESTフレームワークシリアライザ:1つのプロパティに複数のフィールドマッピング

class MyModel(models.Model): 
    FLAG_NEW = 1 
    FLAG_DELETED = 2 

    flags = models.IntegerField() 

.... 

class MyModelSerializer(models.Model): 
    isDeleted = ??? 
    isNew = ??? 
+0

? –

答えて

2
class MyModel(models.Model): 
    FLAG_NEW = 1 
    FLAG_DELETED = 2 

    flags = models.IntegerField(default=0) 

    @property 
    def isNew(self): 
     return self.flags | self.FLAG_NEW 

    @isNew.setter 
    def isNew(self, value): 
     if value: 
      self.flags |= self.FLAG_NEW 
     else: 
      self.flags &= ~self.FLAG_NEW 

    @property 
    def isDeleted(self): 
     return self.flags | self.FLAG_DELETED 

    @isDeleted.setter 
    def isDeleted(self, value): 
     if value: 
      self.flags |= self.FLAG_DELETED 
     else: 
      self.flags &= ~self.FLAG_DELETED 

....

あなたは `BooleanField`代わりのモデルatributeを追加しない理由
class MyModelSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = MyModel 
     fields = ('id', 'isNew', 'isDeleted', ...) 
関連する問題