Подтвердить что ты не робот

Сериализация запроса в структуре отдыха 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)

Он получает параметр user_id, который используется для определения того, имеет ли пользователь права доступа к данным, затем получает набор возвращаемых объектов, но он не работает.

Он пытается сериализовать набор напрямую, а не объект внутри него, поэтому он бросает эту трассировку:

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'

Как я могу сделать это правильно?

Спасибо.

4b9b3361

Ответ 1

Чтобы сериализовать запрос или список объектов вместо экземпляра одного объекта, вы должны передать флаг many=True при создании экземпляра сериализатора. Поэтому в вашем случае попробуйте следующее:

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