2016-06-23 3 views
0

Хорошо, поэтому мой вопрос очень прост, после вызова def create(): он возвращает мне несколько словарей, поэтому я хочу получить ключ от этого dict.Django Rest Framework получить ключ от serializer.data

вот мое мнение:

def create(self, request, *args, **kwargs): 
    #data = json.dumps(request.data) 
    user = self.request.user 
    if user.groups.filter(name='advertisers').exists(): 
     serializer = CampaignSerializer(data=request.data) 
     adsImageSerializer = AdsImagesSerializer() 
     if serializer.is_valid(): 
      serializer.save(advertiser=self.request.user) 
      raise Exception(serializer.validated_data['id']) 
      return Response(serializer.data, status=status.HTTP_201_CREATED,) 
     else: 
      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
    else: 
     return Response({ 
          'status':'Unauthorized', 
          'message':'This account is not authorized to do this request' 
        }, status=status.HTTP_401_UNAUTHORIZED) 
    return super(CampaignStart, self).perform_create(serializer) 

, как вы можете видеть, что я пытаюсь Acces это точкой разрыва в

raise Exception(serializer.validated_data['id'])

Когда я напечатать:

raise Exception(serializer.data)

он возвращает мне это:

{'advertiser': OrderedDict([('username', u'demo'), ('first_name', u'genti'), ('last_name', u'elmazi'), ('email', u'[email protected]'), ('password', u'pbkdf2_sha256$24000$VuPC2uIB4Lb1$Rc9++gdVbAtnNgsD9XxzUx8vlVIaIxztfjNKRY0FOwM='), ('advertiser', OrderedDict([('phone', u'+38971666022'), ('address', u'balindollska bb'), ('state', u'macedonia'), ('city', u'gostivar'), ('ZIP', u'1230'), ('country', u'MK'), ('company', u'maxleads'), ('web_name', u'maxleads'), ('web_url', u' http://www.test.com '), ('web_desc', u'demo description'), ('web_category', u'Automotive'), ('online_revenue', 546546), ('meth_of_conv', u'pay-per-sale')]))]), 'name': u'Demo Campaign', 'end_date': '2016-06-23', 'pay_off': 30, 'description': u'demo description', 'CPC': 2, 'locations': u'Macedonia', 'budget': 10, 'commission': 10, 'keywords': u'keyword 1, keyword 2', 'ads': [OrderedDict([('id', 26), ('headline', u'Demo Headline'), ('description_1', u''), ('description_2', u''), ('display_url', u''), ('final_url', u''), ('mobile_url', u''), ('advertiser', 1)])], 'adsImages': [], 'type': u'PayPerSale', 'start_date': '2016-06-23', 'land_page': u' http://www.test.com ', 'CPM': 1}

Я хочу, чтобы получить доступ к этому:

ads': [OrderedDict([('id', 26),

, как я могу это сделать?

ответ

1

Ключ «id» находится в «abs» dict, поэтому вам нужно сначала получить «abs». Затем введите ключ «id».

Попробуйте это:

def create(self, request, *args, **kwargs): 
    #data = json.dumps(request.data) 
    user = self.request.user 
    if user.groups.filter(name='advertisers').exists(): 
     serializer = CampaignSerializer(data=request.data) 
     adsImageSerializer = AdsImagesSerializer() 
     if serializer.is_valid(): 
      serializer.save(advertiser=self.request.user) 
      raise Exception(serializer.validated_data['abs']['id']) 
      return Response(serializer.data, status=status.HTTP_201_CREATED,) 
     else: 
      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
    else: 
     return Response({ 
          'status':'Unauthorized', 
          'message':'This account is not authorized to do this request' 
        }, status=status.HTTP_401_UNAUTHORIZED) 
    return super(CampaignStart, self).perform_create(serializer) 
+0

спасибо дружище :) –

+0

ваш Добро пожаловать! ;) –

+0

почему он говорит мне: TypeError: индексы списка должны быть целыми числами, а не str –