Ошибка утверждения в проекте Django
Я пытаюсь протестировать API для создания компании, но он выдает ошибку утверждения. В нем говорится, что мне нужно создать пользовательский метод .create(), но я уже определил его, но все равно получаю ошибку.
serializer.py
class TaxInformationSerializer(serializers.ModelSerializer):
class Meta:
model = TaxInformation
fields = '__all__'
def create(self, validated_data):
return TaxInformation.objects.create(**validated_data)
class CompanySerializer(serializers.ModelSerializer):
tax_information = TaxInformationSerializer()
class Meta:
model = Company
fields = ["brand_name", "legal_name", "mobile", "telephone_no", "fax", "status", "tax_information"]
read_only_fields = ['user', 'created_at']
def create(self, validated_data):
# Automatically set the user to the request user
request = self.context.get('request')
if request and hasattr(request, 'user'):
validated_data['user'] = request.user
return super().create(validated_data)
# Create the tax information instance
tax_information_data = validated_data.pop('tax_information')
# tax_information = TaxInformation.objects.create(**tax_information_data)
tax_information_serializer = TaxInformationSerializer(data=tax_information_data)
tax_information_serializer.is_valid(raise_exception=True)
tax_information = tax_information_serializer.save()
# Create the company instance with the tax information
instance = Company.objects.create(tax_information=tax_information, **validated_data)
return instance
И ошибка:
AssertionError at /datamanagement/company
The `.create()` method does not support writable nested fields by default.
Write an explicit `.create()` method for serializer `datamanagement.serializers.CompanySerializer`, or set `read_only=True` on nested serializer fields.
Я уже определил пользовательский метод создания, но все равно получаю ошибку.
Django Rest Serializer по умолчанию не обрабатывает операции записи/обновления для вложенных отношений, поэтому вы можете сделать одно из этих двух:
1- Обработайте его вручную, переопределив метод create/update. Необходимо выполнить итерацию над объектами TaxInformation в методе CompanySerializer и создавать объекты по одному или использовать массовое создание. Также может потребоваться переопределение метода update.
2- Используйте библиотеки типа drf-writable-nested, как указано в документации поDRF. Класс CompanySerializer должен выглядеть следующим образом:
from rest_framework import serializers
from drf_writable_nested.serializers import WritableNestedModelSerializer
class CompanySerializer(WritableNestedModelSerializer):
tax_information = TaxInformationSerializer(many=True)