Ошибка обновления PATCH в django rest framework - PullRequest
0 голосов
/ 27 февраля 2019

После многих исследований и большой помощи (спасибо @bkawan), я получил написать мой метод создания в сериализации drf многие для многих.Моя задача сейчас состоит в том, чтобы заставить мой метод «обновлять» работу.

PUT работает нормально, но PATCH не работает, когда я исключаю поле продукта.

У кого-нибудь есть идеи?Мой serializer.py, views и метод создания: здесь .

И вот моя идея для обновления:

    def update(self, instance, validated_data):

        products = validated_data.pop('products', None)

        if products is not None:
            BundleProduct.objects.filter(bundle=instance.id).delete()

            for product_id in products:
                product = get_object_or_404(Product, pk=product_id)
                BundleProduct.objects.create(product=product, bundle=instance)

        return instance

1 Ответ

0 голосов
/ 28 февраля 2019

Прежде всего, почему вы удаляете и создаете одну и ту же запись каждый раз, когда вы обновляете.Я не знаю, что именно ты делаешь, но это не обязательно и трата времени.Используйте приведенный ниже код, он будет работать как для Update, так и для Patch методов.

def update(self, request, *args, **kwargs):
    partial = kwargs.pop('partial', False)
    instance = self.get_object()
    serializer = self.get_serializer(instance, data=request.data, partial=partial)
    serializer.is_valid(raise_exception=True)
    self.perform_update(serializer)
    return Response(serializer.data)

PUT - Вам необходимо отправить все ожидаемые записи в сериализаторе.

PATCH - Отправьте id и обязательные поля для обновления.

Для дальнейшего ознакомления см. Это

...