当我尝试订购东西时,我不断收到此错误:
这是我的观点.py
if not request.user.is_authenticated:
session = request.session
cart = session.get(settings.CART_SESSION_ID)
del session['cart']
else:
customer = request.user.customer
order, created = Order.objects.get_or_create(
customer=customer, complete=False)
order_product, created = OrderProduct.objects.get_or_create(
order=order, )
order.save()
messages.success(request, 'Заказ успешно оформлен. Проверьте свою электронную почту!!!')
return redirect('product_list')
这是我的 models.py
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
class Category(models.Model):
title = models.CharField(max_length=255, unique=True,
verbose_name='title')
image = models.ImageField(null=True, blank=True,
verbose_name='image')
@property
def category_image_url(self):
try:
url = self.image.url
except:
url = 'https://sarus.uz/public/files/img/news_1528793026.jpg'
return url
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('product_list_by_category', kwargs={'pk': self.pk})
class Meta:
verbose_name = "Category"
verbose_name_plural = "Categories"
class Product(models.Model):
name = models.CharField(max_length=255, verbose_name='name')
company_name = models.CharField(default='', max_length=100, verbose_name='company_name')
price = models.FloatField(verbose_name='price')
image = models.ImageField(null=False, blank=True, verbose_name='image')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='created_at')
mini_description = models.TextField(default='', verbose_name='mini_description', max_length=100)
description = models.TextField(verbose_name='description')
quantity = models.PositiveIntegerField(verbose_name='quantity')
is_published = models.BooleanField(default=True, verbose_name='is_published')
category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='category')
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('product_detail', kwargs={'pk': self.pk})
@property
def image_url(self):
try:
url = self.image.url
except:
url = 'https://sarus.uz/public/files/img/news_1528793026.jpg'
return url
class Meta:
verbose_name = "Product"
verbose_name_plural = "Products"
class Customer(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE , verbose_name='user')
name = models.CharField(max_length=255, null=True, verbose_name='name')
email = models.EmailField(max_length=255, verbose_name='email')
phone = models.CharField(max_length=20, null=False, verbose_name='phone')
def __str__(self):
return self.name
class Meta:
verbose_name = "Customer"
verbose_name_plural = "Customers"
class Order(models.Model):
customer = models.ForeignKey(
Customer, on_delete=models.CASCADE, null=True, blank=True, verbose_name='customer')
date_ordered = models.DateTimeField(auto_now_add=True, verbose_name='date_ordered')
complete = models.BooleanField(default=False, verbose_name='complete')
transaction_id = models.CharField(max_length=100, null=True, verbose_name='transaction_id')
shipping = models.BooleanField(default=True, verbose_name='shipping')
def __str__(self):
return str(self.pk)
@property
def cart_total_price(self):
order_products = self.orderproduct_set.all()
total = sum([product.total_price for product in order_products])
return total
@property
def cart_products_quantity(self):
order_products = self.orderproduct_set.all()
total = sum([product.quantity for product in order_products])
return total
class Meta:
verbose_name = "Order"
verbose_name_plural = "Orders"
class OrderProduct(models.Model):
product = models.ForeignKey(
Product, on_delete=models.CASCADE, null=True, blank=True, verbose_name='product')
order = models.ForeignKey(Order, on_delete=models.CASCADE, null=True, verbose_name='order')
quantity = models.IntegerField(default=0, null=True, blank=True, verbose_name='quantity')
date_added = models.DateTimeField(auto_now_add=True, verbose_name='date-added')
@property
def total_price(self):
total = self.product.price * self.quantity
return total
def __str__(self):
return str(self.pk)
class ShippingAddress(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, verbose_name='customer')
order = models.ForeignKey(Order, on_delete=models.CASCADE, verbose_name='order')
address = models.CharField(max_length=255, verbose_name='address')
city = models.CharField(max_length=255, verbose_name='city')
state = models.CharField(max_length=255, verbose_name='state')
zipcode = models.CharField(max_length=255, verbose_name='zipcode')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='created_at')
def __str__(self):
return self.address
class Meta:
verbose_name = "Shipping address"
verbose_name_plural = "Shipping addresses"
谁能帮我解决这个错误。
Stackoverflow 不允许我发布它,因为它主要是关于代码的。所以我现在添加了一点 lorem。
Lorem Ipsum 只是印刷和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本,当时一位不知名的印刷商拿走了一个字体厨房,并把它加在一起制作了一本字体样本书。它不仅经历了五个世纪,而且还经历了电子排版的飞跃,基本保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而流行,最近随着桌面出版软件如 Aldus PageMaker 的发布而流行,其中包括 Lorem Ipsum 的版本。
if not request.user.is_authenticated:
session = request.session
cart = session.get(settings.CART_SESSION_ID)
if cart: #Changes in here
del session['cart']
else:
customer = request.user.customer
order, created = Order.objects.get_or_create(
customer=customer, complete=False)
order_product, created = OrderProduct.objects.get_or_create(
order=order, )
order.save()
messages.success(request, 'Заказ успешно оформлен. Проверьте свою электронную почту!!!')
return redirect('product_list')
在删除它之前,您需要检查会话中是否存在“购物车”键。