问题描述
我有一个CartModel,CartItem模型。我尝试在创建购物车时创建该购物车,并在创建该购物车时再次添加与我在以前输入的数据相同的数据,以创建另一个购物车。 我试图这样做,如果CartItem表中存在购物车,它必须显示响应“购物车已存在”。 但它正在创建另一个购物车。我进行了大量搜索并使用了代码,但该代码无法运行。 如果有人能够给出答案,请帮助我。
views.py *
class CartTestViewSet(viewsets.ModelViewSet):
serializer_class = CartItemSerializer
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 CartItem.objects.all()
raise PermissionDenied()
raise PermissionDenied()
raise PermissionDenied()
def post(self,request):
cart = Cart.objects.filter(user=request.user,cart=request.data,service=request.data,defects=request.data)
if cart.exists():
print('cart already exists')
else:
print('cart is created')
serializers.py
from rest_framework import serializers
from .models import CartItem,CartModel
from rest_framework.response import Response
class CartItemSerializer(serializers.ModelSerializer):
def get_total(self,obj):
return obj.get_total
get_total = serializers.IntegerField(read_only=True,required=False)
# id = serializers.IntegerField(read_only=False)
class Meta:
model = CartItem
fields = "__all__"
extra_fields = ['get_total']
read_only = ['get_total']
class CartModelSerializer(serializers.ModelSerializer):
class Meta:
model = CartModel
fields = "__all__"
models.py
from django.db import models
from accounts.models import User,SubCategory
from category.models import defects
from django.utils import timezone
# Create your models here.
class CartModel(models.Model):
user = models.ForeignKey('accounts.User',on_delete=models.CASCADE)
status_choice = [
('1','open'),('2','closed')
]
status = models.CharField(max_length=2,choices=status_choice,default=1)
def __str__(self):
return self.user.username
class CartItem(models.Model):
cart = models.ForeignKey('CartModel',on_delete=models.CASCADE)
user = models.ForeignKey('accounts.User',on_delete=models.CASCADE)
service = models.ForeignKey('accounts.SubCategory',on_delete=models.CASCADE)
defects = models.ForeignKey('category.defects',on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
price = models.IntegerField()
created_on = models.DateTimeField(auto_Now_add=True)
updated_on = models.DateTimeField(auto_Now_add=True)
def __str__(self):
total = int(self.quantity) * int(self.price)
return str(total)
def get_total(self):
total = int(self.quantity )* int(self.price)
return total
解决方法
您可以在CartItem模型中使用unique=True
。
如果您尝试以此保存重复的值,django将引发错误。
cart = models.ForeignKey('CartModel',on_delete=models.CASCADE,unique=True)