【发布时间】:2016-08-10 09:50:28
【问题描述】:
当我通过 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' 对象不可迭代
models.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)
如何解决?
感谢任何建议。
【问题讨论】:
-
应该有返回最新方法的列表。我不认为这就是在这种情况下发生的事情。
-
.filter() 返回 Queryset,根据本文档 docs.djangoproject.com/en/1.8/ref/models/querysets 可迭代。我不明白为什么它不起作用。
-
您不应同时定义
queryset和get_queryset。可能不是这里的问题 - 但仍然......所以删除queryset属性并将self.queryset...替换为models.NodeConfig.objects...。 -
@ohrstrom 是的,我在没有查询集的情况下尝试过这个,但仍然没有成功:return models.NodeConfig.objects.filter(node_id=self.kwargs.get('node_pk')).latest('时间戳')
-
问题是,该代码在纯 Django 函数中工作(不在 DRF 中)。我还可以在 Django shell 中提取最新的一个。也许我的模型有问题?我是否需要添加 Meta 类或其他一些选项?我添加了有问题的模型
标签: python django django-rest-framework