set_context() missing 1 required positional argument: 'serializer_field'

来源:10-1 购物车功能需求分析和加入到购物车实现

慕UI825459

2018-06-02

class ShoppingCartSerializer(serializers.Serializer):
    user = serializers.HiddenField(default=serializers.CurrentUserDefault)
    goods = serializers.PrimaryKeyRelatedField(required=True, queryset=Goods.objects.all())
    nums = serializers.IntegerField(required=True)

    # add_time = serializers.HiddenField(default=datetime.now)

    def create(self, validated_data):
        user = self.context["request"].user
        goods = validated_data['goods']
        nums = validated_data['nums']
        if (nums == 0):
            raise serializers.ValidationError("至少添加一个商品")
        shopping_cart = ShoppingCart.objects.filter(goods=goods, user=user)[0]
        if shopping_cart:
            shopping_cart.nums += nums
            shopping_cart.save()
        else:
            shopping_cart = ShoppingCart.objects.create(**validated_data)
        return shopping_cart
class ShoppingCartViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
    """
    购物车
    creat:
    加入购物车
    """
    permission_classes = (IsAuthenticated,)
    authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
    serializer_class = ShoppingCartSerializer
    lookup_field = "goods_id"

    def perform_create(self, serializer):
        shop_cart = serializer.save()
        goods = shop_cart.goods
        goods.goods_num -= shop_cart.nums
        goods.save()

    def get_queryset(self):
        user = self.request.user
        return ShoppingCart.objects.filter(user)

老师,我添加购物车,设置user = serializers.HiddenField(default=serializers.CurrentUserDefault)。ViewSet调用serializer.is_valid(raise_exception=True)出错呢!

完整错误:

Internal Server Error: /shopping_cart/

Traceback (most recent call last):

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner

    response = get_response(request)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response

    response = self.process_exception_by_middleware(e, request)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response

    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view

    return view_func(*args, **kwargs)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/viewsets.py", line 103, in view

    return self.dispatch(request, *args, **kwargs)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/views.py", line 483, in dispatch

    response = self.handle_exception(exc)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/views.py", line 443, in handle_exception

    self.raise_uncaught_exception(exc)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/views.py", line 480, in dispatch

    response = handler(request, *args, **kwargs)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/mixins.py", line 20, in create

    serializer.is_valid(raise_exception=True)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/serializers.py", line 236, in is_valid

    self._validated_data = self.run_validation(self.initial_data)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/serializers.py", line 434, in run_validation

    value = self.to_internal_value(data)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/serializers.py", line 488, in to_internal_value

    validated_value = field.run_validation(primitive_value)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/fields.py", line 520, in run_validation

    (is_empty_value, data) = self.validate_empty_values(data)

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/fields.py", line 501, in validate_empty_values

    return (True, self.get_default())

  File "/usr/local/var/pyenv/versions/3.6.3/lib/python3.6/site-packages/rest_framework/fields.py", line 478, in get_default

    self.default.set_context(self)

TypeError: set_context() missing 1 required positional argument: 'serializer_field'


写回答

1回答

慕UI825459

提问者

2018-06-04

user = serializers.HiddenField(default=serializers.CurrentUserDefault())

少打了个括号。。。。

1
2
15天冲
我也少打了,这种错感觉好难排查啊,感觉看报错信息没什么用呢= =
2020-05-30
共2条回复

Python前后端分离开发Vue+Django REST framework实战

Django REST framework课程视频,RESTFul API前后端分离开发

2880 学习 · 2467 问题

查看课程