2014-10-23 16 views
10

Tôi đang cố gắng sắp xếp một bộ sưu tập các đối tượng. Tôi có xác định các phương pháp xem sau:Serialize queryset trong khung công tác còn lại Django

@csrf_exempt 
def venue_list(request, user_id): 
    """ 
    Check that the user is requesting his own venues. 
    """ 
    profile = get_profile_for_user_if_match(request.user, user_id) 

    if profile is None: 
     return HttpResponse(status=status.HTTP_401_UNAUTHORIZED) 

    venues = profile.venue_set.all() 
    serializer = VenueSerializer(venues) 

    return JSONResponse(serializer.data) 

Nó nhận một tham số user_id được sử dụng để xác định xem người dùng có quyền truy cập vào dữ liệu, sau đó nó được tập các đối tượng để được trả lại, nhưng nó doesn' t làm việc.

Nó đang cố gắng để serialize các thiết lập trực tiếp, thay vì đối tượng bên trong nó, vì vậy ném nó traceback này:

Traceback: 
File "/Users/mariopersonal/Documents/dev/offers/project/offers/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Users/mariopersonal/Documents/dev/offers/project/offers/venv/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    57.   return view_func(*args, **kwargs) 
File "/Users/mariopersonal/Documents/dev/offers/project/offers/wsgi/openshift/business/restful/views/venueViews.py" in venue_list 
    22.  return JSONResponse(serializer.data) 
File "/Users/mariopersonal/Documents/dev/offers/project/offers/venv/lib/python2.7/site-packages/rest_framework/serializers.py" in data 
    572.     self._data = self.to_native(obj) 
File "/Users/mariopersonal/Documents/dev/offers/project/offers/venv/lib/python2.7/site-packages/rest_framework/serializers.py" in to_native 
    351.    value = field.field_to_native(obj, field_name) 
File "/Users/mariopersonal/Documents/dev/offers/project/offers/venv/lib/python2.7/site-packages/rest_framework/fields.py" in field_to_native 
    336.   return super(WritableField, self).field_to_native(obj, field_name) 
File "/Users/mariopersonal/Documents/dev/offers/project/offers/venv/lib/python2.7/site-packages/rest_framework/fields.py" in field_to_native 
    207.    value = get_component(value, component) 
File "/Users/mariopersonal/Documents/dev/offers/project/offers/venv/lib/python2.7/site-packages/rest_framework/fields.py" in get_component 
    58.   val = getattr(obj, attr_name) 

Exception Type: AttributeError at /business/api/venues/1 
Exception Value: 'QuerySet' object has no attribute 'name' 

Làm thế nào tôi có thể làm điều này đúng?

Cảm ơn.

Trả lời

35

Để tuần tự hóa một bộ truy vấn hoặc danh sách các đối tượng thay vì một cá thể đối tượng đơn lẻ, bạn nên chuyển cờ many=True khi khởi tạo bộ nối tiếp. Vì vậy, trong trường hợp của bạn, hãy thử điều này:

... 
venues = profile.venue_set.all() 
serializer = VenueSerializer(venues, many=True) 
... 
+0

Có, nó đã thực hiện thủ thuật! lần sau tôi sẽ đọc tài liệu kỹ càng hơn. Cảm ơn! – mario595

Các vấn đề liên quan