尝试在django中下订单时出错

问题描述 投票:0回答:1

当我尝试订购东西时,我不断收到此错误:

这是我的观点.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 的版本。

python django view
1个回答
0
投票
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')

在删除它之前,您需要检查会话中是否存在“购物车”键。

© www.soinside.com 2019 - 2024. All rights reserved.