2015-10-22 5 views
0

я обеспечиваю JSON на вид, как так -Джанго Rest Framework - доступ к вложенный объект JSON

{ 
    "username": "name", 
    "first_name": "john", 
    "last_name": "doe", 
    "email": "[email protected]", 
    "profile": { 
     "company": "abc corp" 
    } 
} 

Я затем передать его в следующем виде, чтобы получить возможность отправлять -

def post(self, request, format=None): 
     uuid = generate_uuid(request.data.get('username')) 
     data = {'username': request.data.get('username'), 
       'first_name': request.data.get('first_name'), 
       'last_name': request.data.get('last_name'), 
       'email': request.data.get('email'), 
       'company': request.data.get('profile').('company'), 
       'uuid': str(uuid)} 
     serializer = UserSerializer(data=data) 
     if serializer.is_valid(): 
      print serializer.data 
#   serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

I 'm с трудом понимает, как структурировать data для поддержания вложенного значения, поскольку вы можете видеть, что я также включаю поле для uuid, которое также будет находиться в вложенном объекте profile.

, которые затем передается в мой сериализатором здесь -

class UserSerializer(serializers.ModelSerializer): 
    profile = UserProfileSerializer() 
    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email', 'profile') 

мой взгляд, в настоящее время, поскольку это дает синтаксическую ошибку на этой линии -

'company': request.data.get('profile').('company'), 

Я знаю, что это неправильно просто не знаю, как он должен быть структурирован.

ответ

0

Вот правильная версия этой линии:

'company': request.data.get('profile', dict()).get('company'), 

Что это делает поставить пустой Dict в качестве аргумента по умолчанию, если данные отсутствуют в «профиль» объект, или если у него есть один, вызов получить («компания»).

+0

Хммм ... Не думаю, что я поставил свой вопрос правильно. Я вижу, что это делает, но выглядит сглаживающим json. Я обнаружил, что просто выполнение '' profile ': request.data.get (' profile ') 'автоматически помещается в вложенную компанию, но затем, как включить« uuid »во вложенный« профиль »? – whoisearth

+0

@whoisearth Что такое 'uuid'? У вашего UserSerializer нет поля 'uuid', и я уверен, что стандартная модель Django User также не работает. Где именно «uuid» будет спасен? – user2719875

+0

Я генерирую uuid и сохраняю его в модели UserProfile, которую я связываю с пользователем с помощью OneToOneField. – whoisearth

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