Как игнорировать ошибку вместо возврата 400 Bad Request? - Django Rest Framework

Поскольку window.event не существует в Firefox. Это потому, что браузер имеет разные модели событий, и вам придется иметь дело с их различиями или использовать библиотеку, такую ​​как jQuery, чтобы не иметь дело со всеми различиями между браузерами. Добро пожаловать в DOM.

-1
задан Lynx 13 July 2018 в 20:05
поделиться

3 ответа

Я решил проблему следующим образом:

Переопределить метод to_internal_value из SlugRelatedField, рассматривая исключение DoNotExist, чтобы не вызвать ошибку.

class CouponSlugRelatedField(serializers.SlugRelatedField):

    def to_internal_value(self, code):
        try:
            return Coupon.objects.only_valid().get(code=code)
        except Coupon.DoesNotExist:
            return Coupon.objects.none()


class CouponSerializer(serializers.Serializer):
    code = CouponSlugRelatedField(
        slug_field='code',
        required=False,
        source='coupon',
        allow_null=True,
        queryset=Coupon.objects.only_valid()
    )

    def to_representation(self, coupon):
        return {
            'code': coupon.code,
            'discount_amount': coupon.discount_amount,
            'discount_percentage': coupon.discount_percentage,
            'only_first_order': coupon.only_first_order,
        }
0
ответ дан Guilherme Luis 17 August 2018 в 12:10
поделиться

Согласно Django REST Framework docs , вам нужно установить allow_null=True в соответствующем поле в вашем сериализаторе:

class CartSerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(format='hex', read_only=True)
    delivery = DeliverySerializer(required=False, write_only=True)
    customer = CustomerSerializer(required=False, write_only=True)
    coupon = CouponSerializer(
    required=False,
    allow_null=True,
    )
    totals = serializers.SerializerMethodField()

Обратите внимание, что вам понадобится null=True в вашей Cart модели.

0
ответ дан Jens Astrup 17 August 2018 в 12:10
поделиться
  • 1
    Я попытался, но я все равно получаю ту же ошибку – Guilherme Luis 14 July 2018 в 12:51

Вам нужно добавить blank = True в вашу модель, так как это купон ForeignKey = models.ForeignKey('carts.Coupon',related_name='carts',on_delete=models.SET_NULL, null=True, blank=True )

. Хорошая сообщение о разнице нулей и пробелов на модели

0
ответ дан Taylor 17 August 2018 в 12:10
поделиться
  • 1
    Я не решил проблему. Я все еще получаю исключение Coupon.DoesNotExist, когда пользователь пишет неправильный код купона. – Guilherme Luis 15 July 2018 в 19:10
  • 2
    Вы уверены, что передаете пустой или пустой идентификатор купона при публикации. Похоже, что что-то передается как идентификатор при публикации. Нет причин, по которым он должен исключать исключение, если пустым или пустым передается. Если все остальное не удалось обернуть все это в попытке за исключением и поймать ошибку DNE, просто используйте пропуск – Taylor 15 July 2018 в 21:23
  • 3
    Да, я уверен, потому что, если я не передаю какой-либо код, он работает как ожидалось, установив Coupon = Null. Проблема в том, что введен неправильный код, тогда объект исключения не существует. – Guilherme Luis 15 July 2018 в 21:24
  • 4
    Что вы подразумеваете под неправильным кодом? Как введен неверный идентификатор? Возможно, вы можете опубликовать пример кода того, что вы имеете в виду – Taylor 15 July 2018 в 21:28
  • 5
    Да, но я использую SlugRelatedField, поэтому это не ID, а поле Slug с кодом. – Guilherme Luis 15 July 2018 в 21:29
Другие вопросы по тегам:

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