gpt4 book ai didi

python - 在 django rest 框架中使用过滤器获取最新对象

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:31 25 4
gpt4 key购买 nike

当我通过 DRF API 请求 GET 时,我想返回最新的对象。我在 views.py 中试过这个:

class ListCreateNodeConfig(generics.ListCreateAPIView):
queryset = models.NodeConfig.objects.all()
serializer_class = serializers.NodeConfigSerializer

def get_queryset(self):
return self.queryset.filter(node_id=self.kwargs.get('node_pk')).latest('timestamp')

但它抛出错误:“NodeConfig”对象不可迭代

模型.py

class NodeConfig(models.Model):  
node_id = models.ForeignKey(Node)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
record_interval = models.IntegerField(default=0)
lower_frequency = models.IntegerField(default=0)
upper_frequency = models.IntegerField(default=0)

如何解决?

如有任何建议,我们将不胜感激。

最佳答案

这里的问题是 latest() 方法。这不会返回查询集,而是返回单个模型实例。 (如 get(...))

所以使用:

def get_queryset(self):
return self.queryset.filter(node_id=self.kwargs.get('node_pk')).order_by('-timestamp')

因此,如果您想为单个对象设置端点,则不得使用 DRF List* views/mixins。
ListView 假定您要使用列表(=多个对象)。因此他们依赖于 queryset resp。 获取查询集。查询集显然应该是查询集而不是模型实例...

但也包含了 RetrieveAPIView View :

from rest_framework.generics import RetrieveAPIView

class LatestNodeConfigView(RetrieveAPIView):
queryset = models.NodeConfig.objects.all()
# add your serializer
serializer_class = NodeConfigDetailSerializer

def get_object(self, *args, **kwargs):
return self.queryset.filter(node_id=kwargs.get('node_pk')).latest('timestamp')

关于python - 在 django rest 框架中使用过滤器获取最新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38869894/

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