2016-12-25 63 views
0

我有這個tastypie資源:tastypie查詢集值

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')。當我登錄到外殼,並要求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時,它們都返回一個整數。

這個信息不是很有用......哈哈。因爲我確信解決方案在於tastypie或django庫。儘管如此,如果我能想出一種方法將pk附加在能解決我的問題的字典上。

+0

你能否提供堆棧跟蹤? –

+0

我用追溯更新了它。並添加了評論。 – Tsangares

+0

謝謝@Evans修復追蹤,並添加我的評論。 – Tsangares

回答

1

values()方法返回一個返回字典而不是模型實例的查詢集。模型實例具有pk屬性,但字典沒有。 Tastypie試圖在字典中訪問pk,從而導致錯誤。您需要使用返回給模型實例的查詢集的方法。

Django's documentation使用values()

when you know you’re only going to need values from a small number of the available fields and you won’t need the functionality of a model instance object.

在你的情況,你確實需要模型實例對象的功能,pk屬性。

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

+0

謝謝,雖然這是更大問題的一部分。我不需要使用values()函數,但我確實需要某種方法將'queryset'更改爲一組標記而不是問題。 – Tsangares

+0

使用值是解決我在這裏引用的更大問題的解決方案:http://stackoverflow.com/questions/41325395/finding-most-popular-tag-taggit-tastypie-django – Tsangares

+0

雖然,經過反思,似乎我要走了關於這一切都錯了。你引用了django的文檔說:「當你知道你只需要少數人的價值。」那麼我都需要模型的功能,這將是大量的可用字段。好像你的回答是正確的。 – Tsangares