2016-12-25 2 views
0

У меня есть этот tastypie ресурс:tastypie значения QuerySet не отображается

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' она со ссылкой должна быть получена QuerySet по 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 к dict, который решит мои проблемы.

+0

Не могли бы вы предоставить трассировку стека? –

+0

Я обновил его со следом назад. И добавил комментарий. – Tsangares

+0

Спасибо @Evans за исправление трассировки и добавление в мой комментарий. – Tsangares

ответ

1

Метод values() возвращает запрос, который возвращает словари вместо экземпляров модели. Экземпляр модели имеет атрибут pk, но в словаре нет. Tastypie пытается получить доступ к pk в dict, тем самым давая ошибку. Вам нужно использовать метод, который возвращает запрос, задающий экземпляры модели.

От 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

Смежные вопросы