【发布时间】:2021-03-27 10:33:21
【问题描述】:
在我的代码中,我有几个具有多个自定义属性的模型:
@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:TypeError: Object of type Value is not JSON serializable。
我知道这可以通过在MyModelBaseSerializer 中显式添加v1, v2, v3 作为字段来解决,但我不想这样做:我有很多具有Value 属性的模型。我希望默认 DRF 序列化程序知道如何序列化 Value 实例。
我尝试覆盖to_representation,但这似乎不起作用。
我想要类似于覆盖 JSONEncoder.default(o) 方法的东西,但我不知道如何告诉 DRF 使用哪个编码器。
【问题讨论】:
标签: python json django serialization django-rest-framework