Django models 与模型不直接对应的自定义Django列表/详细视图

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

我正在努力实现一个带有分页和JSON:API格式的Django restapi资源,其中的资源与模型没有直接关系

型号

我有一个
节点
,它表示进行测量的设备:

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代码