Python 使用Django REST框架的位字段序列化
我有一个模型,其中包含一个。尝试使用Django Rest Framework序列化对象时,返回以下错误:Python 使用Django REST框架的位字段序列化,python,django,django-rest-framework,django-bitfield,Python,Django,Django Rest Framework,Django Bitfield,我有一个模型,其中包含一个。尝试使用Django Rest Framework序列化对象时,返回以下错误: {"flags": ["Enter a whole number."]} (标志是一个位字段) 如何使用Django Rest框架序列化位字段?找到了答案。我需要为位字段创建一个自定义序列化程序: class BitFieldSerializer(serializers.WritableField): def to_native(self, obj):
{"flags": ["Enter a whole number."]}
(标志
是一个位字段
)
如何使用Django Rest框架序列化
位字段?找到了答案。我需要为位字段
创建一个自定义序列化程序:
class BitFieldSerializer(serializers.WritableField):
def to_native(self, obj):
return int(obj)
并在模型序列化程序中使用它:
class MyModelSerializer(serializers.ModelSerializer):
flags = BitFieldSerializer()
看起来rest框架3.1中Tzach的答案的形式现在是
class BitFieldSerializer(serializers.Field):
def to_internal_value(self, obj):
return int(obj)
e、 g.每小时
“请注意,2.x版中存在的WritableField类已不存在。。如果字段支持数据输入,则应将字段子类化并重写为_internal_value()。如果要读取和写入列表中的标志,请使用另一个选项。”
class BitFieldSerializer(serializers.Field):
def to_internal_value(self, data):
model_field = getattr(self.root.Meta.model, self.source)
result = BitHandler(0, model_field.keys())
for k in data:
try:
setattr(result, str(k), True)
except AttributeError:
raise serializers.ValidationError("Unknown choice: %r" % (k,))
return result
def to_representation(self, value):
return [i[0] for i in value.items() if i[1] is True]
返回示例:['flag1','flag4']
这假定您使用的是ModelSerializer。我获取模型字段键(它的标志)的方法似乎有点粗略,如果有人知道更好的方法,请发表评论。非常感谢!这使得它更加可行,因为对于django位字段,我们无法获得正确的位值作为标志。这使得客户很难对字段进行更改