Django Rest字段分组和定制

时间:2017-05-30 07:35:41

标签: python django django-views django-rest-framework

我有像这样的Django模型:

class Floor(models.Model):
    name = models.CharField(max_lenght =100)

class Point(models.Model):
    created_at      = fields.UnixDateTimeField(auto_now_add=True)
    updated_at      = fields.UnixDateTimeField(auto_now=True)
    floor           = models.ForeignKey(Floor)
    device          = models.CharField(max_lenght=100)

creates_at updated_at 只是带有时间戳的自定义字段。

所以,我需要发送像 points /?start = x,end = y,timeslice = z 这样的请求,其中x -  是这个时期的开始时间戳,y - 结束时间戳,z - 时间片。例如,如果x是一天的开始,而y是和那天,并且z是3600?我将有24个切片,并希望像这样拥有JSON:

{
    floor_id: floor_id
    slice: first timestamp of first slice 
    count: count of devices in this slice
},
{
    floor_id: floor_id
    slice: first timestamp of second slice 
    count: count of devices in this slice
}, 
...

可行的是,我需要自定义我的序列化程序,使用django-filters并为此目的编写特殊视图,但我不知道如何将它组合在一起

UPD:好的,我为Floor模型自定义了我的序列化程序,现在它看起来像:

class FloorWithTPCountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Floor
        fields = ('id', 'count')

    count = serializers.SerializerMethodField('get_tp_count')

    def get_tp_count(self, obj):
        return obj.trackpoint_set.values('tag').distinct().count()

并且我没有像JSON一样回复JSON:

{
    "id": 28,
    "count": 3
},
{
    "id": 35,
    "count": 1
},

我可以建议,我需要在此序列化类中获取查询字符串参数,并声明一种在时间片内计算点数的方法。那么,我怎样才能在序列化器类中获得querydict?

1 个答案:

答案 0 :(得分:0)

好的,正如我早期建议的那样,关键在于序列化程序的定制。我必须为所需的JSON结构声明自定义方法。 这是我的解决方案:

  {
    "id": 49,
    "results": [
      {
        "count": 3,
        "timestamp": 1496188800
      }
    ]
  }, 

当然,它仍然缺乏一些querstring一致性的检查,但我可以获取JSON表单,因为我需要。 例如,请求

<强> tpfloors /起动= 1496188800&安培;端= 1496275199&安培;聚集=天

我可以得到这样的东西:

$posttype = $grid->wpupg_post_types;

最好的问候。