gpt4 book ai didi

django-rest-framework - 从Django简单历史记录获取休息历史记录

转载 作者:行者123 更新时间:2023-12-03 15:14:04 29 4
gpt4 key购买 nike

我正在使用django-simple-history(1.8.1)和DRF(3.5.3)。我想获得一个包含每个元素的历史记录的休息服务。让我们举个例子吧!

models.py

class Product(models.Model):
name = models.CharField(max_length=50)
price = models.IntegerField()
history = HistoricalRecords()

def __str__(self):
return self.name

因此, serializers.py 必须是什么?我想得到类似的东西:
[
{
"id": 1,
"name": "Apple",
"price": 8,
"history": [
{
"history_id": 1,
"id": 1,
"name": "Apple",
"price": 0,
"history_date": "2016-11-22T08:02:08.739134Z",
"history_type": "+",
"history_user": 1
},
{
"history_id": 2,
"id": 1,
"name": "Apple",
"price": 10,
"history_date": "2016-11-22T08:03:50.845634Z",
"history_type": "~",
"history_user": 1
},
{
"history_id": 3,
"id": 1,
"name": "Apple",
"price": 8,
"history_date": "2016-11-22T08:03:58.243843Z",
"history_type": "~",
"history_user": 1
}
]
}
]

在搜寻解决方案之后,我终于找到了自己的解决方案。但是如果有人有更好的解决方案...

最佳答案

我知道已经过了一年,但是无论如何,也许有人觉得它有用。这是我的解决方案(对我来说似乎容易得多):

一个新的序列化器字段:

class HistoricalRecordField(serializers.ListField):
child = serializers.DictField()

def to_representation(self, data):
return super().to_representation(data.values())

现在,只需将其用作序列化器中的字段即可:

history = HistoricalRecordField(read_only=True)

这利用了DRF内置的 listdict序列化程序,唯一的技巧是将其传递给正确的可迭代对象,这是通过在简单历史模型管理器类上调用 .values()来完成的。

关于django-rest-framework - 从Django简单历史记录获取休息历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40736838/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com