Конечно, есть, и Майк указал на самый простой способ. Если вы учитесь, вы, вероятно, захотите написать свою собственную функцию? Во-первых, вы хотите расколоть каждую строку в пробелах, чтобы получить массив значений (или нажмите список слов слов в массив, как в Ответ Далтона , в Perl всегда есть более чем один способ сделать что-либо). Затем, для каждого элемента в массиве , вы хотите напечатать его и его копию во втором массив на одну строку. (Что вы будете делать, если один массив закончится раньше другого?)
Конечно, если вы хотите изучить Perl, вы также определенно захотите научиться использовать CPAN, так что все равно стоит попробуйте использовать Data :: Pivot.
Метод create
вашего сериализатора ДОЛЖЕН возвращать экземпляр объекта, который он представляет. Кроме того, вы не должны выполнять итерации внутри сериализатора для создания экземпляров, что должно быть сделано в представлении: вы перебираете данные, вызывая сериализатор каждую итерацию.
Обновлен файл serializers.py, чтобы включить приведенный ниже код
class ReceiptLogSerializerClass(serializers.Serializer):
#Fields
def create(self, validated_data):
raw_data_list = []
many = isinstance(validated_data, list)
if many:
raw_data_list = validated_data
else:
raw_data_list.append(validated_data)
result_id = 1
for data_row in raw_data_list:
new_command_run_entry = {
'team_name': data_row.get('team_name'),
'suite_name': data_row.get('suite_name'),
'suite_run_id': data_row.get('suite_run_id'),
'case_name': data_row.get('case_name'),
'command_name': data_row.get('command_name'),
'command_run_id': data_row.get('command_run_id'),
'run_start': data_row.get('run_start'),
'run_end': data_row.get('run_end'),
'result': data_row.get('result'),
'run_status': data_row.get('run_status')
}
response = TestCaseCommandRunSerializer.create(TestCaseCommandRunSerializer(),validated_data= new_command_run_entry)
new_command_run_result_entry = {
'suite_run_id': data_row.get('suite_run_id'),
'command_run_id': data_row.get('command_run_id'),
'rule_name': data_row.get('rule_name'),
'result_id': result_id,
'result': data_row.get('result'), # PASS or FAIL
'expected_values': data_row.get('expected_values'),
'actual_values': data_row.get('actual_values'),
'report_values': data_row.get('report_values'),
'extended_values': data_row.get('extended_values'),
}
response = TestCaseCommandRunResultsSerializer.create(TestCaseCommandRunResultsSerializer(),validated_data= new_command_run_result_entry)
logger.info(" new_command_run_result_entry response %s" % response)
result_id += 1
return validated_data
Я неправильно десериализовал данные и поэтому столкнулся с несколькими проблемами. возвращение validated_data исправило все ошибки, и теперь я могу публиковать () данные для нескольких моделей через один API.
Для публикации нескольких полезных нагрузок в одном вызове API добавлены строки ниже в ReceiptLogViewSet
def get_serializer(self, *args, **kwargs):
if "data" in kwargs:
data = kwargs["data"]
if isinstance(data, list):
kwargs["many"] = True
return super(ReceiptLogViewSet, self).get_serializer(*args, **kwargs)
Ссылка: Среда отдыха Django не может работать с несколькими объектами в наборе моделей