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())
少打了个括号。。。。
122020-05-30
Python前后端分离开发Vue+Django REST framework实战
2880 学习 · 2467 问题
相似问题