Django models 与模型不直接对应的自定义Django列表/详细视图
我正在努力实现一个带有分页和JSON:API格式的Django restapi资源,其中的资源与模型没有直接关系 型号 我有一个Django models 与模型不直接对应的自定义Django列表/详细视图,django-models,django-rest-framework,django-views,Django Models,Django Rest Framework,Django Views,我正在努力实现一个带有分页和JSON:API格式的Django restapi资源,其中的资源与模型没有直接关系 型号 我有一个节点,它表示进行测量的设备: class Node(models.Model): device_id = models.CharField(...) 以及样本模型,用于节点采集的测量样本: class Sample(model.Model): node_ref = models.ForeignKey(Node, on_delete=models.CAS
节点
,它表示进行测量的设备:
class Node(models.Model):
device_id = models.CharField(...)
以及样本
模型,用于节点采集的测量样本:
class Sample(model.Model):
node_ref = models.ForeignKey(Node, on_delete=models.CASCADE, related_name='samples')
timestamp_s = models.PositiveIntegerField()
value = models.PositiveIntegerField()
每个节点可以有多个样本;i、 例如,每个节点都有其相关的测量时间序列
资源
在API上,为示例
模型提供列表和详细视图没有多大意义。相反,我希望获得一个timeseries/
list资源,其中list视图提供每个节点的时间序列概览;简化格式,无JSON:API格式和超链接
[
{
"device_id": "node1",
"from": "2010-05-27T12:33:34Z",
"to": "2020-10-09:T00:04:34Z",
"sample_count": 247943
},
{
"device_id": "node2",
"from": ...
...
},
...<more nodes, possibly paged>...
]
[
{
“设备id”:“节点1”,
“from”:“2010-05-27T12:33:34Z”,
“收件人”:“2020-10-09:T00:04:34Z”,
“样本计数”:247943
},
{
“设备id”:“节点2”,
“来自”:。。。
...
},
......
]
深入挖掘,timeseries/
应该返回所选节点的时间序列,如
{
"device_id": "node1",
"from": "2010-05-27T12:33:34Z",
"to": "2020-10-09:T00:04:34Z",
"sample_count": 100 # when page[size]=100
"samples": [
{
"timestamp": "2010-05-27T12:33:34Z",
"value": 123.4
},
{
"timestamp": "2010-05-27T12:45:11Z",
"value": 118.7
},
...<many more samples, possibly paged>...
]
}
{
“设备id”:“节点1”,
“from”:“2010-05-27T12:33:34Z”,
“收件人”:“2020-10-09:T00:04:34Z”,
“样本计数”:当页面[大小]=100时为100
“样本”:[
{
“时间戳”:“2010-05-27T12:33:34Z”,
“价值”:123.4
},
{
“时间戳”:“2010-05-27T12:45:11Z”,
“价值”:118.7
},
......
]
}
问题
我想利用Django Rest框架与JSON:API提供的所有好处。特别是,我希望对列表视图和实际时间序列都进行分页。也就是说,分页应该返回时间序列详细信息资源,其中包含(device_id、from、to、sample_count)头和时间序列列表的分页部分。报头中的字段应根据返回的时间序列片进行更改
此外,响应的格式应符合JSON:API规范,并包括指向节点
资源的超链接
据我所知,DRF和DJA提供了所需的大部分功能,只要我能提供匹配的模型。也就是说,如果不是分页和JSON:API类以及混入到ModelView
的紧密耦合,所有这些都可以工作,而QuerySet
API和Django模型的其他特性反过来又严重依赖于QuerySet
API
有办法去吗
- 创建一个类,该类的行为类似于
模型,但以某种方式围绕示例列表“包装”其他信息(设备id、开始和结束时间)示例
- 或者构建一个行为类似于模型但实际不是模型的类(没有表),而是将所有queryset操作代理给实际的
模型Sample
- 或者可能还有其他我不知道的选择
免责声明:这是我在Django的第一周,我可能会误解一些概念。请让我知道。我认为您的示例需要一个ModelSerializer,节点需要另一个ModelSerializer,其中还包括示例ModelSerializer。这样,api/node/node_id应该显示特定节点的所有示例。如果这不是您需要的,请提供有关timeseries、sample_count、to、from的更多信息-我相信它们与您的模型相关-提供models.py代码