python - 具有唯一约束的 Django 添加到购物车功能失败
问题描述
我有一个添加到购物车的功能,它在触发时会引发错误。如果用户使用管理员帐户,则该功能有效,但是当用户拥有普通帐户时,它会显示以下错误。
视图.py
@login_required
def add_to_cart(request, slug):
item = get_object_or_404(Item, slug=slug)
order_item, created = OrderItem.objects.get_or_create(
item=item,
user=request.user,
ordered=False,
)
order_qs = Order.objects.filter(user=request.user, ordered=False)
if order_qs.exists():
order = order_qs[0]
# check if the order item is in the order
if order.items.filter(item__slug=item.slug).exists():
order_item.quantity += 1
order_item.save()
order.save()
messages.success(request, "This item was updated to your cart.")
else:
messages.success(request, "This item was added to your cart.")
order.items.add(order_item)
order.save()
else:
ordered_date = timezone.now()
order = Order.objects.get_or_create(id=item.id,
user=request.user, ordered_date=ordered_date)
order.items.add(order_item)
order.save()
messages.success(request, "This item was added to your cart.")
return redirect("product", slug=slug)
模型.py
class Item(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
price = models.FloatField()
stored = models.DateTimeField(auto_now_add=True)
item_quantity = models.IntegerField(default=1)
img = models.ImageField(upload_to='images/')
category = models.CharField(choices=CATEGORY_CHOICES, max_length=15)
slug = models.SlugField(unique=True, default=uuid.uuid1)
def __str__(self) -> str:
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(Item, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse("product", kwargs={"slug": self.slug})
def get_add_to_cart_url(self):
return reverse("add-to-cart", kwargs={
'slug': self.slug
})
def get_remove_from_cart_url(self):
return reverse("remove_from_cart", kwargs={
'slug': self.slug
})
def get_add_single_item_to_cart_url(self):
return reverse("add_single_item_to_cart", kwargs={
'slug': self.slug
})
def get_remove_single_item_from_cart_url(self):
return reverse("remove_single_item_from_cart", kwargs={
'slug': self.slug
})
class OrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
ordered = models.BooleanField(default=False)
def __str__(self):
return f"{self.quantity} of {self.item.title}"
def get_total_item_price(self):
return self.quantity * self.item.price
def get_final_price(self):
return self.get_total_item_price()
def get_quantity(self):
return self.quantity
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
items = models.ManyToManyField(OrderItem)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
ordered = models.BooleanField(default=False)
total_price = models.FloatField(default=0)
def __str__(self):
return self.user.username
def get_total(self):
total = 0
for order_item in self.items.all():
total += order_item.get_final_price()
return total
def save(self, *args, **kwargs):
total = 0
self.total_price = self.get_total()
return super().save(*args, **kwargs)
错误信息:
/add-to-cart/start-with-why/ UNIQUE 约束处的 IntegrityError 失败:ecommpage_order.id 请求方法:GET 请求 URL:http: //127.0.0.1 :8000/add-to-cart/start-with-why / Django 版本:3.1.7 异常类型:IntegrityError 异常值:UNIQUE 约束失败:ecommpage_order.id
解决方案
推荐阅读
- mysql - MySql 如何返回包含所有选定特征的所有项目
- c# - 我调试它时没有错误,但是当我使用正确的 id 登录时它只出现了登录失败
- xamarin - 如何在 Xamarin iOS 上设置最大部署目标?
- ios - 快速更新基于网络可用性的 Viewcontroller
- python - 无法使用 Python3 和 pydicom 读取 dicom 文件
- python-3.x - 在创建虚拟环境时使用 libtiff 库获取 conda 验证错误
- primefaces - 如何使用按钮或命令按钮折叠 primesfaces 数据表?
- java - Java嵌套parcelable,无法初始化数组
- reactjs - Apollo Query 未发出请求
- php - PHP - 以分钟为单位的时间差