在我的代码中,我有几个具有多个自定义属性的模型:
@dataclass
class Value:
amount: float
currency: str
class MyModel(models.Model):
...
@property
def v1(self) -> Value:
...
@property
def v2(self) -> Value:
...
@property
def v3(self) -> Value:
...
我有以下序列化程序:
class MyModelBaseSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = [..., "v1", "v2", "v3"]
序列化任何MyModel
实例时,会出现类型错误:TypeError: Object of type Value is not JSON serializable
我知道这可以通过在MyModelBaseSerializer
中显式地添加v1, v2, v3
作为字段来解决,但我不想这样做:我有许多具有Value
属性的模型。我希望默认的DRF序列化程序知道如何序列化Value
实例。
我试图重写to_representation
,但似乎不起作用。
我想要类似于重写JSONEncoder.default(o)
方法的东西,但是我不知道如何告诉DRF使用哪个编码器
为
Value
添加自定义序列化程序。例如(未测试)或者,由于
Value
是一个dataclass
,请看一下https://github.com/oxan/djangorestframework-dataclasses编辑
一种快速而干净利落的方法是重写序列化程序(see docs)上的
build_property_field
重写^{} 是另一种选择
相关问题 更多 >
编程相关推荐