【问题标题】:tastypie queryset values is not being displayed美味派查询集值未显示
【发布时间】:2016-12-25 08:46:22
【问题描述】:

我有这个美味的资源:

class TagResource_min(ModelResource):
     class Meta:
          queryset=Question.objects.values('text', 'id')

当我这样做时,我遇到了错误:

{

    "error_message": "'dict' object has no attribute 'pk'",
    "traceback": "
        Traceback (most recent call last): 

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 219, in wrapper    
        response = callback(request, *args, **kwargs)  

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 450, in dispatch_list    
        return self.dispatch('list', request, **kwargs)  

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 482, in dispatch    
        response = method(request, **kwargs)  

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 1340, in get_list    
        for obj in to_be_serialized[self._meta.collection_name]  

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 1340, in <listcomp>    
        for obj in to_be_serialized[self._meta.collection_name]  

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 895, in full_dehydrate    
        data[field_name] = method(bundle)  

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 1068, in dehydrate_resource_uri    
        return self.get_resource_uri(bundle)  

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 819, in get_resource_uri    
        return self._build_reverse_url(url_name, kwargs=self.resource_uri_kwargs(bundle_or_obj))  

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 798, in resource_uri_kwargs    
        kwargs.update(self.detail_uri_kwargs(bundle_or_obj))  

        File \"/home/will/agora/env/lib/python3.5/site-packages/tastypie/resources.py\", line 775, in detail_uri_kwargs    
        kwargs[self._meta.detail_uri_name] = getattr(bundle_or_obj, self._meta.detail_uri_name)

        AttributeError: 'dict' object has no attribute 'pk'"

}

它所指的'dict'必须是Question.objects.values('text', 'id')得到的查询集。当我登录 shell 并询问 Question.objects.values('text', 'id') 时,我有以下信息:

<QuerySet [{'text': 'Why does capillary action take place?', 'id': 1}, {'text': "If a human brain was connected to a fish's body, how would the humans thoughts change?", 'id': 2},...

使用objects.values() 我做错了什么?如何使用 objects.values() 显示新的查询集?

EDIT 当我使用Question.objects.values() 时,它返回一个dict 数组,它没有dict.pk 属性。但是当我执行Question.objects.all() 时,它返回一个ModelResource 类型的数组,当我调用ModelResource.pk 时,它们都返回一个整数。

这些信息并没有真正的帮助......哈哈。因为我确信解决方案存在于 sweetpie 或 django 库中。不过,如果我能想出一种方法在 dict 上附加一个 pk 就可以解决我的问题。

【问题讨论】:

  • 您能提供堆栈跟踪吗?
  • 我用回溯更新了它。并添加了评论。
  • 感谢 @Evans 修复回溯,并在我的评论中添加。

标签: python django tastypie


【解决方案1】:

values() 方法返回一个查询集,该查询集返回字典而不是模型实例。模型实例具有pk 属性,但字典没有。 Tastypie 试图访问字典中的pk,从而给出错误。您需要使用一种方法来返回提供模型实例的查询集。

来自Django's documentation 使用values()

当您知道您只需要来自少数可用字段的值并且您不需要模型实例对象的功能时。

在您的情况下,您确实需要模型实例对象 pk 属性的功能。

我建议使用Question.objects.all()

【讨论】:

  • 谢谢,虽然这是更大问题的一部分。我不需要使用 values() 函数,但我确实需要某种方式将 queryset 更改为一组标签而不是问题。
  • 使用值是我在此处引用的更大问题的解决方案:stackoverflow.com/questions/41325395/…
  • 尽管如此,经过反思,似乎我对这一切都错了。你引用了 django 的文档说,“当你知道你只需要一小部分的值时。”好吧,我都需要模型的功能,这将用于大量可用字段。看来你的答案是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 2014-01-23
  • 1970-01-01
  • 2011-10-18
  • 2012-04-18
相关资源
最近更新 更多