我有一个具有 flags
属性的模型,它是多个值的位掩码。我想使用 django-rest-framework 将其公开为 API,其中不同的标志是不同的 bool 属性。比如说,如果标志是 FLAG_NEW=1
、FLAG_DELETED=2
,我想公开 isNew
和 isDeleted
字段。对于只读模型,这很简单 - 只需使用 SerializerModelField
并获取是否设置了标志。但是,当我想反序列化时,这不起作用(这是一个只读字段)。我可以使用自定义字段,但是我应该在 source=
参数中放入什么内容?如果我放置 source=flags
,它们将相互覆盖,如果我不放置,那么如何获取初始值?
class MyModel(models.Model):
FLAG_NEW = 1
FLAG_DELETED = 2
flags = models.IntegerField()
....
class MyModelSerializer(models.Model):
isDeleted = ???
isNew = ???
最佳答案
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
...
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('id', 'isNew', 'isDeleted', ...)
关于Django REST框架序列化器: multiple fields mapping to one property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39307597/