Django REST框架序列化器: multiple fields mapping to one property

标签 django serialization django-rest-framework

我有一个具有 flags 属性的模型,它是多个值的位掩码。我想使用 django-rest-framework 将其公开为 API,其中不同的标志是不同的 bool 属性。比如说,如果标志是 FLAG_NEW=1FLAG_DELETED=2,我想公开 isNewisDeleted 字段。对于只读模型,这很简单 - 只需使用 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/

相关文章:

使用运算符的 C++ 序列化文件>>

python - 如何使用 PUT 在 Django 休息框架中测试文件上传?

django - 如何提供静态/管理/而不仅仅是静态/CSS?

python - Django 限制查询

python - Django Rest 序列化程序 : Use nested serializer on GET but not POST

django - 如何在模型上使用 OrderingFilter 和其他 Filterset 过滤

Django rest_framework,在特定方法中禁用身份验证和权限

python - Redis 实现后 Django session 停止工作

django - 第一次调用表单时禁用验证

java - 使用 Serializable 的副作用?