简体   繁体   English

Django Rest Framework从serializer.data获取密钥

[英]Django Rest Framework get key from serializer.data

Ok so my question is very simple, after calling def create(): It returns me multiple dictionaries, so I want to get a key from this dict. 好了,在调用def create()之后,我的问题很简单:它返回了多个字典,因此我想从此字典中获取一个键。

here is my view: 这是我的看法:

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)

as you can see I am trying to acces this by a break point in 如您所见,我正在尝试通过一个断点来访问

raise Exception(serializer.validated_data['id']) 引发异常(serializer.validated_data ['id'])

When i print the: 当我打印时:

raise Exception(serializer.data) 引发Exception(serializer.data)

it returns me this: 它返回我:

{'advertiser': OrderedDict([('username', u'demo'), ('first_name', u'genti'), ('last_name', u'elmazi'), ('email', u'demo@demo.com'), ('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''), ('mob {'advertiser':OrderedDict([[''username',u'demo'),('first_name',u'genti'),('last_name',u'elmazi'),('email',u'demo @ demo.com'),('password',u'pbkdf2_sha256 $ 24000 $ VuPC2uIB4Lb1 $ Rc9 ++ gdVbAtnNgsD9XxzUx8vlVIaIxztfjNKRY0FOwM ='),('advertiser',OrderedDict([('phone','( ,u'balindollska bb'),('state',u'macedonia'),('city',u'gostivar'),('ZIP',u'1230'),('country',u'MK' ),('公司',u'maxleads'),('web_name',u'maxleads'),('web_url',u'http ://www.test.com '),('web_desc',u'演示说明'),('web_category',u'Automotive'),('online_revenue',546546),('meth_of_conv',u'pay-per-sale']]))))),'名称':u'演示活动”,“结束日期”:“ 2016-06-23”,“付款截止”:30,“说明”:u'demo description',“ CPC”:2,“位置”:u“马其顿”,“预算” :10,'commission':10,'keywords':u'keyword 1,关键字2','ads':[OrderedDict([('id',26),('headline',u'Demo Headline'), ('description_1',u''),('description_2',u''),('display_url',u''),('final_url',u''),('暴民 ile_url', u''), ('advertiser', 1)])], 'adsImages': [], 'type': u'PayPerSale', 'start_date': '2016-06-23', 'land_page': u' http://www.test.com ', 'CPM': 1} ile_url',u''),('advertiser',1)])]],'adsImages':[],'type':u'PayPerSale','start_date':'2016-06-23','land_page' :u'http: //www.test.com','CPM ':1}

I want to access this: 我要访问此:

ads': [OrderedDict([('id', 26), 广告”:[OrderedDict([('id',26),

how can I do that ? 我怎样才能做到这一点 ?

The "id" key is in the "abs" dict, so you need access "abs" first. “ id”键位于“ abs”字典中,因此您需要首先访问“ abs”。 Then access "id" key. 然后访问“ id”键。

Try this: 尝试这个:

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM