django: ошибка утверждения `create ()` не вернула экземпляр объекта

Конечно, есть, и Майк указал на самый простой способ. Если вы учитесь, вы, вероятно, захотите написать свою собственную функцию? Во-первых, вы хотите расколоть каждую строку в пробелах, чтобы получить массив значений (или нажмите список слов слов в массив, как в Ответ Далтона , в Perl всегда есть более чем один способ сделать что-либо). Затем, для каждого элемента в массиве , вы хотите напечатать его и его копию во втором массив на одну строку. (Что вы будете делать, если один массив закончится раньше другого?)

Конечно, если вы хотите изучить Perl, вы также определенно захотите научиться использовать CPAN, так что все равно стоит попробуйте использовать Data :: Pivot.

0
задан sneha salvi 18 March 2019 в 22:59
поделиться

2 ответа

Метод create вашего сериализатора ДОЛЖЕН возвращать экземпляр объекта, который он представляет. Кроме того, вы не должны выполнять итерации внутри сериализатора для создания экземпляров, что должно быть сделано в представлении: вы перебираете данные, вызывая сериализатор каждую итерацию.

0
ответ дан Stargazer 18 March 2019 в 22:59
поделиться

Обновлен файл 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 не может работать с несколькими объектами в наборе моделей

0
ответ дан sneha salvi 18 March 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: