Django преобразование набора запросов в список
Я пытаюсь выполнить массовую вставку с помощью jquery ajax и django restframework. Когда я загружаю свои данные, используя интерфейс django restframework, это работает, но когда я печатаю request.data, я получаю следующее
[{'name': 'Tenant 1', 'email': 'tenant1@gmail.com', 'phone_number': 619}, {'name': 'Tenant 2', 'email': 'tenant2@gmail.com', 'phone_number': 9
11}]
Однако, когда я загружаю его с помощью jquery, я получаю данные в виде
<QueryDict: {'name': ['Tenant 1', 'Tenant 2'], 'calling_code': ['254', '254'], 'phone_number': ['619', '911'], 'email': ['tenant1@gmail.com', 'tenant2@gmail.com']}>
вот мой код: в tenantsAdd.html:
$(document).on('submit', '#create_tenant_bulk', function (event) {
var form_data = new FormData(this);
event.preventDefault();
$.ajax({
method: 'POST',
url: '{% url "tenants:tenant-listcreate" %}',
data: form_data,
mimeType:'application/json',
contentType: false,
dataType: "json",
processData: false,
В моем файле views.py:
class CreateTenantAPIView(generics.ListCreateAPIView):
queryset = Tenant.objects.all()
serializer_class = TenantSerializer
def create(self, request, *args, **kwargs):
print('yaaaaaaaaaaaaaaaaaaaaaaaazweeeeeeeeeeeeeh')
print(request.data)
print(type(request.data))
many = isinstance(request.data, list)
serializer = self.get_serializer(data=request.data, many=many)
if serializer.is_valid(raise_exception=True):
saved_user= serializer.save(added_by=self.request.user)
return Response({
'success': 'user has been added succsfully',
})
else:
return Response({
'error': 'you done f@#ckd up',
'error_list':serializer.errors.items()
})
Так что баически я пытаюсь сделать так:
<QueryDict: {'name': ['Tenant 1', 'Tenant 2'], 'calling_code': ['254', '254'], 'phone_number': ['619', '911'], 'email': ['tenant1@gmail.com', 'tenant2@gmail.com']}>
Вот это:
[{'name': 'Tenant 1', 'email': 'tenant1@gmail.com', 'phone_number': 619}, {'name': 'Tenant 2', 'email': 'tenant2@gmail.com', 'phone_number': 911}]
Так что это временное решение проблемы, надеюсь, есть более элегантный способ сделать это
def query_to_list(request):
data = {'name': ['Tenant 1', 'Tenant 2'], 'calling_code': ['254', '254'], 'phone_number': [
'619', '911'], 'email': ['tenant1@gmail.com', 'tenant2@gmail.com']}
records = list(data.values())
record_data = []
i = 0
while i < len(data['name']):
record_data.append(
{
'name': records[0][i],
'calling_code': records[1][i],
'phone_number': records[2][i],
'email': records[3][i]
})
i += 1
print(record_data)
return HttpResponse(record_data)
Я сделал его немного более динамичным на случай, если кто-то захочет использовать его
Я начал с создания файла под названием bulk_insert.py
def append_record(length, title, data, i):
j = 0
sub_record = {}
while j < length:
sub_record.update({title[j] : data[j][i]})
j += 1
return sub_record
def bulk_data_fomart(raw_data):
data=dict(raw_data)
records_title = list(data)
records = list(data.values())
record_data = []
i = 0
while i < len(data[records_title[0]]):
if(records[0][i]):
record_data.append(append_record(len(records_title),records_title, records,i))
i += 1
return record_data
После этого остается только импортировать файл и использовать его в моей функции следующим образом:
class ListCreate_tenant(generics.ListBulkCreateAPIView):
queryset = Tenant.objects.all()
serializer_class = TenantSerializer
success_insert='Your data has been added'
def create(self, request, format=None, *args, **kwargs):
bulk_data=bulk_data_fomart(request.data)
many = isinstance(bulk_data, list)
serializer = self.get_serializer(data=bulk_data, many=many)
if serializer.is_valid():
saved_user2 = serializer.save(added_by=self.request.user)
return Response({
'success': self.success_insert,
'response': serializer.data[0],
})
else:
error_response = fix_errors_bulk(serializer.errors)
return Response({
'error': error_response
})