Django "NotImplementedError: `to_internal_value()` должно быть реализовано" при отправке запроса на исправление

Я пытаюсь получить обновленный нормализованный ресурс, когда я обновляю ресурс с помощью патча.

(Использование APIRequestFactory в моих тестах TestCase, например self.factory.patch)

LoadBaseSerializer наследует BaseSerializer и использует to_representation. Я делаю это, чтобы вернуть настроенный сериализатор. Однако я продолжаю получать эту раздражающую ошибку

Запрос патча содержит {'carrier' : 2 }. Я ожидаю вернуть весь сериализованный ресурс, но, полагаю, это работает только для GET-запросов.

Как я могу заставить это работать для методов PATCH/POST?

Вид:

class LoadUDView(RetrieveUpdateDestroyAPIView):
    serializer_class = NormalizedLoadSerializer
    queryset = Load.objects.all()

Мой сериализатор выглядит следующим образом:

# custom serializer
class NormalizedLoadSerializer(LoadBaseSerializer):
    # not working, still get error
    def to_internal_value(self, data):
        load_data = data['carrier']
        return super().to_internal_value(load_data)

    
    def to_representation(self, instance):
        # dict values serialized using ModelSerializer
        data = dict(
                contacts=self.get_driver_contacts(instance.carrier),
                drivers=self.get_drivers(instance.carrier),
                income = IncomeSerializer(instance.income, read_only=True).data,
                expense = ExpenseSerializer(instance.expense, read_only=True).data,
                stops = StopSerializer(instance.stops, many=True, read_only=True).data,
                load=LoadSerializer(instance, read_only=True).data,
                income_line_items= self.get_income_line_items(instance),
                expense_line_items= self.get_expense_line_items(instance),
                addresses=self.get_addresses(instance)
            )
        return data

LoadBaseSerializer:

# inherit BaseSerializer and added helper functions
class LoadBaseSerializer(serializers.BaseSerializer):

    def get_income_line_items(self, instance):
        income = instance.income.income_line_items.all()
        return IncomeLineItemSerializer(income, many=True).data


    def get_expense_line_items(self, instance):
        expense = instance.expense.expense_line_items.all()
        return ExpenseLineItemSerializer(expense, many=True).data


    def get_addresses(self, instance):
        data = [stop.address for stop in instance.stops.all()]
        return AddressSerializer(data, many=True).data


    def get_driver_contacts(self, carrier):
        data = [driver.contact for driver in carrier.drivers.all()]
        return ContactSerializer(data, many=True).data


    def get_drivers(self, carrier):
        data = carrier.drivers.all()
        return DriverSerializer(data, many=True).data
Вернуться на верх