7.8-7.10 JLL实习日志-DjangoAPI+python+json,post for many records in a time

xiaoxiao2021-02-28  89

1.python json post for many records in a time stack openflow 的提问

The Explaination are as follows: The get_serializer method that’s used by default for ModelViewSet passes in the data without many=True so you have to override it and make sure you check the request for a list instead of a dictionary.

解释 :ModelViewSet 在传递数据的时候使用的是get_serializer 函数,默认设置是没有many =true 的,所以我们需要重写get_serializer函数

viewset端,主要的作用是进行重写get_serializer函数

class BrandViewSet(viewsets.ModelViewSet): model = Brand serializer_class = BrandSerializer queryset = Brand.objects.all() def get_serializer(self, *args, **kwargs): if 'data' in kwargs: data = kwargs['data'] if isinstance(data, list): kwargs['many'] = True return super(BrandViewSet, self).get_serializer(*args,**kwargs)

Serializer 端

class BrandSerializer(serializers.ModelSerializer): class Meta: model = Brand fields = '__all__'

测试端代码 a.py,

item = [ { "Brand_Name":"Test_for_Sam", "Brand_Group":"test20170712", "Pref_Brand_Name":"test20170712", "Brand_Name_SC":"test20170712", "Pref_Brand_Name_Flg":"test20170712", "Created_By":"test20170712", "Modified_By":"test20170712", "Category_1_Code":"test20170712", "Category_2_Code":"test20170712", "Category_Display":"test20170712", "Price_Low":"test20170712", "Price_High":"test20170712", "Size_Low":"test20170712", "Size_High":"test20170712", "Status":"test20170712", "Comment":"test20170712", "Web_Site":"test20170712", "Headerquater":"test20170712", "Protect_period":"test20170712", "Year_Enter_Market":"test20170712", "Agreement_InPlace_Flg":"test20170712", "PrimaryContact":"1", "Company_Group":[ 1 ] }, { "Brand_Name":"Test_for_JLL", "Brand_Group":"test20170712", "Pref_Brand_Name":"test20170712", "Brand_Name_SC":"test20170712", "Pref_Brand_Name_Flg":"test20170712", "Created_By":"test20170712", "Modified_By":"test20170712", "Category_1_Code":"test20170712", "Category_2_Code":"test20170712", "Category_Display":"test20170712", "Price_Low":"test20170712", "Price_High":"test20170712", "Size_Low":"test20170712", "Size_High":"test20170712", "Status":"test20170712", "Comment":"test20170712", "Web_Site":"test20170712", "Headerquater":"test20170712", "Protect_period":"test20170712", "Year_Enter_Market":"test20170712", "Agreement_InPlace_Flg":"test20170712", "PrimaryContact":"1", "Company_Group":[ 1 ] } ] data=json.dumps(item) BASE_URL_3 = 'https://horizon-retail-sam-leon-ghibli.c9users.io/restful_api/brandviewset/' def test_get_user_list_3(): resp = requests.post(BASE_URL_3,auth=AUTH,data=data,headers={ "Content-Type":"application/json","Accept": "application/json"}) print resp.status_code print resp.content test_get_user_list_3()

在解决问题中碰到的问题 1.已经转成[{ },{ },{ }] ,为什么需要还需要转成data=json.dump(item) 的形式呢?不是已经是json 的形式了吗 ? 尝试过如果直接data = item 的形式,会报错ValueError: too many values to unpack 2.[“无效数据。期待为字典类型,得到的是 list “]} 3. 只是增加一条数据,但是其他的数据都是为空,参考地址 参考的地址

转载请注明原文地址: https://www.6miu.com/read-28910.html

最新回复(0)