2016-07-24 37 views
2

我使用DRF并且在AttributeError'str'对象的前面没有属性'~~'。在DRF(django-rest-framework)中,AttributeError'str'对象没有属性'~~'如何解决它?

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/blog/ 

Django Version: 1.9.7 
Python Version: 3.5.2 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.gis', 
'blog', 
'account', 
'taggit', 
'friendship', 
'rest_framework'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response 
    149.      response = self.process_exception_by_middleware(e, request) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    58.   return view_func(*args, **kwargs) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/views.py" in dispatch 
    466.    response = self.handle_exception(exc) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/views.py" in dispatch 
    463.    response = handler(request, *args, **kwargs) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/decorators.py" in handler 
    52.    return func(*args, **kwargs) 

File "/home/keepair/djangogirls/blog/views.py" in post_list 
    37.   return Response(serializer.data) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/serializers.py" in data 
    700.   ret = super(ListSerializer, self).data 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/serializers.py" in data 
    239.     self._data = self.to_representation(self.instance) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/serializers.py" in to_representation 
    618.    self.child.to_representation(item) for item in iterable 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/serializers.py" in <listcomp> 
    618.    self.child.to_representation(item) for item in iterable 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/serializers.py" in to_representation 
    463.     attribute = field.get_attribute(instance) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/relations.py" in get_attribute 
    157.   return get_attribute(instance, self.source_attrs) 

File "/home/keepair/djangogirls/myvenv/lib/python3.5/site-packages/rest_framework/fields.py" in get_attribute 
    83.     instance = getattr(instance, attr) 

Exception Type: AttributeError at /blog/ 
Exception Value: 'str' object has no attribute 'author' 

我的错误页面和代码我不知道如何使serializers.py代码。

我已经学:http://www.django-rest-framework.org/api-guide/relations/

但我不知道我应该做的。我应该在哪里放serializers.py? 以及如何让我的序列化代码?或者可能models.ForienKey在使用DRF时不可用?

博客/ views.py

@api_view(['GET']) 
def post_list(request, format=None): 
    """ 
    List all snippets, or create a new snippet. 
    """ 
    if request.method == 'GET': 
     lat = request.POST.get('user_lat', '13') 
     lon = request.POST.get('user_lon', '15') 
     userpoint = GEOSGeometry('POINT(' + lat + ' ' + lon + ')', srid=4326) 
     i=1 

     while i: 
      list_i = Post.objects.filter(point__distance_lte = (userpoint, D(km=i))) 
      list_total = str(',' + ' list_i') 
      post_list = list(chain(list_total)) 
      if len(post_list) >= 0 : 
       break 

     serializer = PostSerializer(post_list, many=True) 
     return Response(serializer.data) 
+0

您需要在blog/views中显示post_list函数。 –

+0

请不要在这里发布很长的代码,因为这对我们来说是一项非常繁琐的任务。你可以考虑通过这个[链接](http://stackoverflow.com/help/mcve) –

+0

@DanielRoseman,添加博客/ views.py抱歉,我不知道需要什么代码。 – touchingtwist

回答

1

这有什么,与你的序列化,或者你把它。错误回溯告诉你错误发生在视图中。

因此,在您的post_list视图中,您将建立一个列表(也称为post_list),该列表由字符串列表填充。然后,您尝试将其置入PostSerializer,这当然是期待Posts的查询集。

我不确定列表的要点是什么;好像你应该直接将帖子传递给序列化程序。

+0

谢谢,但我必须使用我的自定义'post_list'。有没有办法让这个post_list'序列化'? – touchingtwist

+0

你究竟想要“序列化”?你的列表完全由一系列相同的字符串组成,所有这些都是'',list_i“'。重点是什么? –

+0

首先'',list_i'是为了满足itertools - chain的语法(来自:https://docs.python.org/3.3/library/itertools.html),将我的列表总结为一个列表。例如,来自'用户点'附近5km列表(+我的自定义选项,如作者的名字是巴士总站)post_list和post_list是从'用户点'附近10km列表..这样的方式,也许我想要总和5-7只列出一个列表。所以最后我想序列化最后一个列表(itertools的结果)。对不起,我可怜的英文表达。我希望这足以让你理解我的想法。 – touchingtwist

相关问题