我正在尝试将 Django 休息框架与 Django 简单历史结合使用。这个答案让我理解了如何序列化模型的历史项目。这适用于简单的情况,但我的模型有一个计算字段(下例中的“存储”)。问题是历史字段的序列化似乎没有捕捉到这些。如何以与主模型相同的方式对历史进行序列化?to_representation
是否可以在方法中做到这一点HistoricalRecordField
?
class MyModel(models.Model):
...
history = HistoricalRecords()
@property
def store(self):
return {}
class HistoricalRecordField(serializers.ListField):
child = serializers.DictField()
def to_representation(self, data):
return super().to_representation(data.values())
class MySerializer(serializers.ModelSerializer):
...
store = serializers.DictField(child=serializers.CharField(), read_only=True)
history = HistoricalRecordField(read_only=True)
class Meta:
model = MyModel
我得到的是这样的:
[
{
"id": 1,
"store": {}
"history": [
{
"history_id": 1,
"id": 1,
"history_date": "2016-11-22T08:02:08.739134Z",
"history_type": "+",
"history_user": 1
},
{
"history_id": 2,
"id": 1,
"history_date": "2016-11-22T08:03:50.845634Z",
"history_type": "~",
"history_user": 1
}
]
}
]
但我想要的是没有历史列的历史项目和没有显示的“商店”字段。基本上我希望历史项目列表像主模型中的项目一样被序列化:
[
{
"id": 1,
"store": {...} ,
...
"history": [
{
"store": {...},
...
"id": 1,
},
{
"store": {...},
...
"id": 1,
}
]
}
]