如何解决如何在Django Rest框架中更新数据
我有一个购物车模型,我想在API中使用,如果用户在购物车中两次添加相同的商品,则购物车会自动增加服务量。就我而言,如果我添加相同的项目两次,它将创建另一个购物车,而不是更新前一个。我搜索了很多,但没有得到答案。我为此做了很多尝试。如果有人有能力给出答案,请给出答案
这是我的代码:-
views.py
class CartViewSet(viewsets.ModelViewSet):
serializer_class = CartSerializer
permission_classes = (IsAuthenticated,)
def get_queryset(self):
user = self.request.user
if user.is_authenticated:
if user is not None:
if user.is_active and user.is_superuser or user.is_Customer:
return Cart.objects.all()
raise PermissionDenied()
raise PermissionDenied()
raise PermissionDenied()
filter_backends = [DjangoFilterBackend]
filterset_fields = ['date_created','user']
@action(detail=False)
def count(self,request):
queryset = self.filter_queryset(self.get_queryset())
count = queryset.count()
content = {'count': count}
return Response(content)
serializers.py
class CartSerializer(serializers.ModelSerializer):
class Meta:
model = Cart
fields = ['id','url','user','service','defects','date_created','quantity','price','total']
models.py
class Cart(models.Model):
user = models.ForeignKey('accounts.User',related_name="carts",null=True,on_delete=models.SET_NULL)
quantity = models.IntegerField(default=1)
service = models.ForeignKey('accounts.SubCategory',on_delete=models.SET_NULL)
defects = models.ForeignKey('Defects',on_delete=models.SET_NULL)
price = models.IntegerField(default=False)
date_created = models.DateTimeField(auto_now_add=True)
total = models.IntegerField(blank=True,null=True)
def __str__(self):
return self.user.username
解决方法
您必须重写CartSerializer
中的创建方法,才能检查和更新(如果已创建)。我会提到一些与此相关的东西
覆盖创建方法
class CartSerializer(serializers.ModelSerializer):
class Meta:
model = Cart
fields = ['id','url','user','service','defects','date_created','quantity','price','total']
def create(self,validated_data):
""" Create cart if not created """
cart,created = Cart.objects.get_or_create(**validated_data)
if not created:
cart.quantity=cart.quantity+1
# you have to write your own logic i give you just an hint
return cart
在这里,我们覆盖了create方法,它在每次更改购物车对象的创建流程时在购物车URL上发布请求时都会调用
希望您能了解所有查询问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。