Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django Rest框架中覆盖get方法';s API视图_Python_Django_Django Rest Framework_Django Views - Fatal编程技术网

Python 如何在Django Rest框架中覆盖get方法';s API视图

Python 如何在Django Rest框架中覆盖get方法';s API视图,python,django,django-rest-framework,django-views,Python,Django,Django Rest Framework,Django Views,我正试图构建一个API视图,根据我作为请求发送的内容从数据库返回一些数据 我有一个模型建筑小组,它有许多建筑物,有许多冷热物体。这些冷热物体有一年和一个值。当我发送特定年份时,我希望列出该建筑组中该年份的所有热值/冷值 我认为这应该很简单,但我不知道我的方向是否正确 我试图覆盖Django的APIView的get方法,如下所示: class BuildingGroupYearHeatObjects(APIView): def get(self, request, pk):

我正试图构建一个API视图,根据我作为请求发送的内容从数据库返回一些数据

我有一个模型建筑小组,它有许多建筑物,有许多冷热物体。这些冷热物体有一年和一个值。当我发送特定年份时,我希望列出该建筑组中该年份的所有热值/冷值

我认为这应该很简单,但我不知道我的方向是否正确

我试图覆盖Django的APIView的get方法,如下所示:

class BuildingGroupYearHeatObjects(APIView):

    def get(self, request, pk):
        data = request.data
        year = request.data['year']

        ...here should go more code.....        

        return Response(year)

我在这里得到一个关键错误:
KeyError:'year'

我的网址

    path('demand/heat/<int:pk>/',BuildingGroupYearHeatObjects.as_view(),

所以我的问题是,如果我真的走对了路,为什么会出现关键错误?只有在浏览器中刷新API视图时,才会出现密钥错误。但是如果我发了一个请求,我不会得到它。我想这是因为我刷新浏览器时没有发送一年

但我怎么才能解决这个问题呢

还有,如果有人能告诉我如何实现在发送年份之后列出热/冷对象

非常感谢您的帮助

以下是我的模型:

class Building(models.Model):
    name  = models.CharField(max_length=120, null=True, blank=True)


class BuildingGroup(models.Model):
    description           = models.CharField(max_length=500, null=True, blank=True)
    buildings             = models.ManyToManyField(Building, default=None, blank=True)


class DemandBase(models.Model):
    year            = models.PositiveIntegerField(default=default_year())
    demand          = models.FloatField(blank=True, null=True)
    building        = models.ForeignKey(Building, on_delete=models.CASCADE)

 class Meta:
        abstract = True


(DemandBase有两个子类DemandHeat和DemandCol)

您将获得
KeyError
异常,因为您试图访问请求的数据字典,该字典在执行
post
put
patch
请求时使用

您正在发出
get
请求,因此无法在请求中发送正文。您可以使用query url参数,然后通过代码中的请求的
query\u参数
访问if

但是我建议您使用过滤,您不需要自己编写任何复杂的代码

您只需编写视图,使用rest框架的泛型
ListAPIView
。您可以指定查询集和序列化程序

然后查看
django过滤器
包()

您可以轻松地为
年添加一个过滤器
,它将在您的查询集上应用该过滤器,以便仅为所选年选择对象

class Building(models.Model):
    name  = models.CharField(max_length=120, null=True, blank=True)


class BuildingGroup(models.Model):
    description           = models.CharField(max_length=500, null=True, blank=True)
    buildings             = models.ManyToManyField(Building, default=None, blank=True)


class DemandBase(models.Model):
    year            = models.PositiveIntegerField(default=default_year())
    demand          = models.FloatField(blank=True, null=True)
    building        = models.ForeignKey(Building, on_delete=models.CASCADE)

 class Meta:
        abstract = True